aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2015-08-11 10:35:30 -0400
committerRuss Cox <rsc@golang.org>2015-08-11 20:46:22 +0000
commit58035ec8ee68b288d9a0680919e2f4e4a9f28824 (patch)
tree654bb69a1c46b3c746c842cd9f03ddbbe3ef6204
parent28fb0d802380391044650e36f186c27302d6f578 (diff)
downloadgo-58035ec8ee68b288d9a0680919e2f4e4a9f28824.tar.gz
go-58035ec8ee68b288d9a0680919e2f4e4a9f28824.zip
cmd/go: run test binaries in original environment
Fixes #12096. Followup to CL 12483, which fixed #11709 and #11449. Change-Id: I9031ea36cc60685f4d6f65c39f770c89b3e3395a Reviewed-on: https://go-review.googlesource.com/13449 Reviewed-by: Ian Lance Taylor <iant@golang.org>
-rw-r--r--src/cmd/go/build.go2
-rw-r--r--src/cmd/go/go_test.go15
-rw-r--r--src/cmd/go/main.go5
-rw-r--r--src/cmd/go/test.go2
-rw-r--r--src/cmd/go/vcs.go2
5 files changed, 20 insertions, 6 deletions
diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go
index 718edd2f77..b7c7e0584f 100644
--- a/src/cmd/go/build.go
+++ b/src/cmd/go/build.go
@@ -1880,7 +1880,7 @@ func (b *builder) runOut(dir string, desc string, env []string, cmdargs ...inter
cmd.Stdout = &buf
cmd.Stderr = &buf
cmd.Dir = dir
- cmd.Env = mergeEnvLists(env, envForDir(cmd.Dir))
+ cmd.Env = mergeEnvLists(env, envForDir(cmd.Dir, os.Environ()))
err := cmd.Run()
// cmd.Run will fail on Unix if some other process has the binary
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go
index 0718869aa6..77b2628982 100644
--- a/src/cmd/go/go_test.go
+++ b/src/cmd/go/go_test.go
@@ -2294,6 +2294,21 @@ func TestIssue11709(t *testing.T) {
tg.run("run", tg.path("run.go"))
}
+func TestIssue12096(t *testing.T) {
+ tg := testgo(t)
+ defer tg.cleanup()
+ tg.tempFile("test_test.go", `
+ package main
+ import ("os"; "testing")
+ func TestEnv(t *testing.T) {
+ if os.Getenv("TERM") != "" {
+ t.Fatal("TERM is set")
+ }
+ }`)
+ tg.unsetenv("TERM")
+ tg.run("test", tg.path("test_test.go"))
+}
+
func TestGoBuildOutput(t *testing.T) {
tg := testgo(t)
defer tg.cleanup()
diff --git a/src/cmd/go/main.go b/src/cmd/go/main.go
index 88a94417d7..8ebde89259 100644
--- a/src/cmd/go/main.go
+++ b/src/cmd/go/main.go
@@ -446,11 +446,10 @@ func runOut(dir string, cmdargs ...interface{}) []byte {
// The environment is the current process's environment
// but with an updated $PWD, so that an os.Getwd in the
// child will be faster.
-func envForDir(dir string) []string {
- env := os.Environ()
+func envForDir(dir string, base []string) []string {
// Internally we only use rooted paths, so dir is rooted.
// Even if dir is not rooted, no harm done.
- return mergeEnvLists([]string{"PWD=" + dir}, env)
+ return mergeEnvLists([]string{"PWD=" + dir}, base)
}
// mergeEnvLists merges the two environment lists such that
diff --git a/src/cmd/go/test.go b/src/cmd/go/test.go
index 0ba1883714..ba1ab82680 100644
--- a/src/cmd/go/test.go
+++ b/src/cmd/go/test.go
@@ -1027,7 +1027,7 @@ func (b *builder) runTest(a *action) error {
cmd := exec.Command(args[0], args[1:]...)
cmd.Dir = a.p.Dir
- cmd.Env = envForDir(cmd.Dir)
+ cmd.Env = envForDir(cmd.Dir, origEnv)
var buf bytes.Buffer
if testStreamOutput {
cmd.Stdout = os.Stdout
diff --git a/src/cmd/go/vcs.go b/src/cmd/go/vcs.go
index 2ee1057a58..28a7540dfe 100644
--- a/src/cmd/go/vcs.go
+++ b/src/cmd/go/vcs.go
@@ -344,7 +344,7 @@ func (v *vcsCmd) run1(dir string, cmdline string, keyval []string, verbose bool)
cmd := exec.Command(v.cmd, args...)
cmd.Dir = dir
- cmd.Env = envForDir(cmd.Dir)
+ cmd.Env = envForDir(cmd.Dir, os.Environ())
if buildX {
fmt.Printf("cd %s\n", dir)
fmt.Printf("%s %s\n", v.cmd, strings.Join(args, " "))