1
0
mirror of https://github.com/golang/go synced 2024-11-17 21:44:43 -07:00

cmd/go: don't initialize Builder in envcmd.MkEnv

The Builder isn't needed by MkEnv, and Builder.Init doesn't have side
effects that change the environment. Builder.Init does currently call
CheckGOOSARCHPair, but that's being moved out in CL 234658.

Builder.Init creates the temporary work directory used by the
builder. For the builder created in MkEnv, this directory is never
used. Creating this directory can cause unnecessary errors for
commands that don't use a builder like 'go clean' and 'go list'.

Fixes #38395
Updates #24398

Change-Id: Ib93ae55afdf958000470657f4c4ff5bd92700e46
Reviewed-on: https://go-review.googlesource.com/c/go/+/236563
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
Jay Conrod 2020-06-04 11:41:43 -04:00
parent a20cb4ca5c
commit 5ae198087b
2 changed files with 42 additions and 10 deletions

View File

@ -63,9 +63,6 @@ var (
)
func MkEnv() []cfg.EnvVar {
var b work.Builder
b.Init()
envFile, _ := cfg.EnvFile()
env := []cfg.EnvVar{
{Name: "GO111MODULE", Value: cfg.Getenv("GO111MODULE")},

View File

@ -1,15 +1,50 @@
env GO111MODULE=off
[short] skip
# Set GOCACHE to a clean directory to ensure that 'go build' has work to report.
env GOCACHE=$WORK/gocache
[!windows] env GOCACHE=$WORK/gocache
[windows] env GOCACHE=$WORK\gocache
# Build should use GOTMPDIR if set.
env GOTMPDIR=$WORK/my-favorite-tmpdir
# 'go build' should use GOTMPDIR if set.
[!windows] env GOTMPDIR=$WORK/my-favorite-tmpdir
[windows] env GOTMPDIR=$WORK\my-favorite-tmpdir
mkdir $GOTMPDIR
go build -work hello.go
go build -x hello.go
stderr ^WORK=.*my-favorite-tmpdir
# Make GOTMPDIR a regular file. This prevents the creation of work directories,
# so we can check that certain commands don't create them.
# This simulates running on a full disk or a read-only volume.
rm $GOTMPDIR
cp hello.go $GOTMPDIR # any file will do
# 'go build' should fail if GOTMPDIR is read-only.
! go build -x .
stderr '^go: creating work dir: \w+ '$GOTMPDIR
# 'go list' should only fail if it needs to build something.
go list -x .
! stderr 'creating work dir'
stdout m
go list -m all
stdout m
! go list -x -export .
stderr '^go: creating work dir: \w+ '$GOTMPDIR
# 'go clean -cache' and 'go clean -modcache' should not fail.
go clean -x -cache
! stderr 'creating work dir'
go clean -x -modcache
! stderr 'creating work dir'
# 'go env' should not fail for specific variables.
# Without arguments, it needs to initialize a builder to load cgo flags, and
# that uses a temporary directory.
! go env
stderr '^go: creating work dir: \w+ '$GOTMPDIR
go env GOROOT
-- go.mod --
module m
go 1.15
-- hello.go --
package main
func main() { println("hello") }