]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/base: rename EnvForDir to AppendPWD
authorBryan C. Mills <bcmills@google.com>
Thu, 26 Mar 2020 02:17:04 +0000 (22:17 -0400)
committerBryan C. Mills <bcmills@google.com>
Thu, 26 Mar 2020 19:07:15 +0000 (19:07 +0000)
EnvForDir does not immediately evoke “append”, and thus may not prompt
the reader to consider the possibility of aliasing bugs (as in
issue #38077). To make this behavior more obvious at the call site, rename
cmd/go/internal/base.EnvForDir to AppendPWD and swap the order of
arguments to a conventional “append” function (similar to those in the
strconv package).

For #38077

Change-Id: I16f09aa0fa8a269d51f0511eb402a44e2759eb94
Reviewed-on: https://go-review.googlesource.com/c/go/+/225578
Reviewed-by: Jay Conrod <jayconrod@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
src/cmd/go/internal/base/env.go
src/cmd/go/internal/get/vcs.go
src/cmd/go/internal/test/test.go
src/cmd/go/internal/work/buildid.go
src/cmd/go/internal/work/exec.go

index 077295e0effcee5656192c2a39a0f4824be49f0b..5f2665d2367082bc20dbfa586be7571b14536c0b 100644 (file)
@@ -4,12 +4,12 @@
 
 package base
 
-// EnvForDir returns a modified environment suitable for running in the given
-// directory.
-// The environment is the supplied base environment but with an updated $PWD, so
-// that an os.Getwd in the child will be faster.
-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.
+// AppendPWD returns the result of appending PWD=dir to the environment base.
+//
+// The resulting environment makes os.Getwd more efficient for a subprocess
+// running in dir.
+func AppendPWD(base []string, dir string) []string {
+       // Internally we only use absolute paths, so dir is absolute.
+       // Even if dir is not absolute, no harm done.
        return append(base, "PWD="+dir)
 }
index 2e4d6388cfe790b4f4337a04febe9eef125dda99..fd37fcb76f2197c3fd157f8ec8a67c283b5f1c7b 100644 (file)
@@ -430,7 +430,7 @@ func (v *vcsCmd) run1(dir string, cmdline string, keyval []string, verbose bool)
 
        cmd := exec.Command(v.cmd, args...)
        cmd.Dir = dir
-       cmd.Env = base.EnvForDir(cmd.Dir, os.Environ())
+       cmd.Env = base.AppendPWD(os.Environ(), cmd.Dir)
        if cfg.BuildX {
                fmt.Fprintf(os.Stderr, "cd %s\n", dir)
                fmt.Fprintf(os.Stderr, "%s %s\n", v.cmd, strings.Join(args, " "))
index ec7bde16feabb36b719c0659f011a432c3cb27e5..48a873e46b14f30e305b38f4915f4d4aea521ea2 100644 (file)
@@ -1157,7 +1157,7 @@ func (c *runCache) builderRunTest(b *work.Builder, a *work.Action) error {
 
        cmd := exec.Command(args[0], args[1:]...)
        cmd.Dir = a.Package.Dir
-       cmd.Env = base.EnvForDir(cmd.Dir, cfg.OrigEnv[:len(cfg.OrigEnv):len(cfg.OrigEnv)])
+       cmd.Env = base.AppendPWD(cfg.OrigEnv[:len(cfg.OrigEnv):len(cfg.OrigEnv)], cmd.Dir)
        cmd.Stdout = stdout
        cmd.Stderr = stdout
 
index 7558a3091aa6c7a6646652b78dcc36a39951023b..6613b6fe3f2fa500b2306eec81344efe17429d76 100644 (file)
@@ -185,7 +185,7 @@ func (b *Builder) toolID(name string) string {
 
        cmdline := str.StringList(cfg.BuildToolexec, path, "-V=full")
        cmd := exec.Command(cmdline[0], cmdline[1:]...)
-       cmd.Env = base.EnvForDir(cmd.Dir, os.Environ())
+       cmd.Env = base.AppendPWD(os.Environ(), cmd.Dir)
        var stdout, stderr bytes.Buffer
        cmd.Stdout = &stdout
        cmd.Stderr = &stderr
@@ -244,7 +244,7 @@ func (b *Builder) gccgoToolID(name, language string) (string, error) {
        // compile an empty file on standard input.
        cmdline := str.StringList(cfg.BuildToolexec, name, "-###", "-x", language, "-c", "-")
        cmd := exec.Command(cmdline[0], cmdline[1:]...)
-       cmd.Env = base.EnvForDir(cmd.Dir, os.Environ())
+       cmd.Env = base.AppendPWD(os.Environ(), cmd.Dir)
        // Force untranslated output so that we see the string "version".
        cmd.Env = append(cmd.Env, "LC_ALL=C")
        out, err := cmd.CombinedOutput()
index 8f2ffee36f9f8d7efbd931b14d0dcd069f410ab7..d781ad23067ed07e60399aac926b3dfd87ae1938 100644 (file)
@@ -1925,7 +1925,7 @@ func (b *Builder) runOut(a *Action, dir string, env []string, cmdargs ...interfa
        cleanup := passLongArgsInResponseFiles(cmd)
        defer cleanup()
        cmd.Dir = dir
-       cmd.Env = base.EnvForDir(cmd.Dir, os.Environ())
+       cmd.Env = base.AppendPWD(os.Environ(), cmd.Dir)
        cmd.Env = append(cmd.Env, env...)
        start := time.Now()
        err := cmd.Run()
@@ -2381,7 +2381,7 @@ func (b *Builder) gccSupportsFlag(compiler []string, flag string) bool {
        }
        cmd := exec.Command(cmdArgs[0], cmdArgs[1:]...)
        cmd.Dir = b.WorkDir
-       cmd.Env = base.EnvForDir(cmd.Dir, os.Environ())
+       cmd.Env = base.AppendPWD(os.Environ(), cmd.Dir)
        cmd.Env = append(cmd.Env, "LC_ALL=C")
        out, _ := cmd.CombinedOutput()
        // GCC says "unrecognized command line option".