From 8f9893173b70d7c2520321ff128f659e497914f4 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 1 Jun 2017 17:38:34 -0700 Subject: [PATCH] cmd/go: initialize in get before loading packages Otherwise the packages will not pick up the way that -installsuffix is changed by -buildmode and -race. Fixes #20512. Change-Id: Ieca32c958a531beb6331dff30d7e9a4998867dbb Reviewed-on: https://go-review.googlesource.com/44630 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Russ Cox --- src/cmd/go/go_test.go | 14 ++++++++++++++ src/cmd/go/internal/get/get.go | 3 +++ src/cmd/go/internal/work/build.go | 4 ++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go index 4a3d4559ed..90a95fd23d 100644 --- a/src/cmd/go/go_test.go +++ b/src/cmd/go/go_test.go @@ -3159,6 +3159,20 @@ func TestGoGetUpdate(t *testing.T) { tg.run("get", "-d", "-u", "github.com/rsc/go-get-issue-9224-cmd") } +// Issue #20512. +func TestGoGetRace(t *testing.T) { + testenv.MustHaveExternalNetwork(t) + if !canRace { + t.Skip("skipping because race detector not supported") + } + + tg := testgo(t) + defer tg.cleanup() + tg.makeTempdir() + tg.setenv("GOPATH", tg.path(".")) + tg.run("get", "-race", "github.com/rsc/go-get-issue-9224-cmd") +} + func TestGoGetDomainRoot(t *testing.T) { // golang.org/issue/9357. // go get foo.io (not foo.io/subdir) was not working consistently. diff --git a/src/cmd/go/internal/get/get.go b/src/cmd/go/internal/get/get.go index 0181c5f5b7..6291a72fc7 100644 --- a/src/cmd/go/internal/get/get.go +++ b/src/cmd/go/internal/get/get.go @@ -90,6 +90,9 @@ func init() { } func runGet(cmd *base.Command, args []string) { + work.InstrumentInit() + work.BuildModeInit() + if *getF && !*getU { base.Fatalf("go get: cannot use -f flag without -u") } diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go index 77f9fc3e01..2dfd54171a 100644 --- a/src/cmd/go/internal/work/build.go +++ b/src/cmd/go/internal/work/build.go @@ -545,6 +545,8 @@ func libname(args []string, pkgs []*load.Package) (string, error) { } func runInstall(cmd *base.Command, args []string) { + InstrumentInit() + BuildModeInit() InstallPackages(args, false) } @@ -553,8 +555,6 @@ func InstallPackages(args []string, forGet bool) { base.Fatalf("cannot install, GOBIN must be an absolute path") } - InstrumentInit() - BuildModeInit() pkgs := pkgsFilter(load.PackagesForBuild(args)) for _, p := range pkgs { -- 2.48.1