gotoolchain := cfg.Getenv("GOTOOLCHAIN")
if gotoolchain == "" {
- gotoolchain = "auto"
+ // cfg.Getenv should fall back to $GOROOT/go.env,
+ // so this should not happen, unless a packager
+ // has deleted the GOTOOLCHAIN line from go.env.
+ // It can also happen if GOROOT is missing or broken,
+ // in which case best to let the go command keep running
+ // and diagnose the problem.
+ return
}
gotoolchain, min, haveMin := strings.Cut(gotoolchain, "+")
break
}
if a == "-" {
+ break
+ }
+ if a == "--" {
if i+1 < len(args) {
arg = args[i+1]
}
{Name: "GOROOT", Value: cfg.GOROOT},
{Name: "GOSUMDB", Value: cfg.GOSUMDB},
{Name: "GOTMPDIR", Value: cfg.Getenv("GOTMPDIR")},
+ {Name: "GOTOOLCHAIN", Value: cfg.Getenv("GOTOOLCHAIN")},
{Name: "GOTOOLDIR", Value: build.ToolDir},
{Name: "GOVCS", Value: cfg.GOVCS},
{Name: "GOVERSION", Value: runtime.Version()},
return def
}
-func findEnv(env []cfg.EnvVar, envFile map[string]string, name string) string {
+func findEnv(env []cfg.EnvVar, name string) string {
for _, e := range env {
if e.Name == name {
return e.Value
}
}
- return envFile[name]
+ if cfg.CanGetenv(name) {
+ return cfg.Getenv(name)
+ }
+ return ""
}
// ExtraEnvVars returns environment variables that should not leak into child processes.
env := cfg.CmdEnv
env = append(env, ExtraEnvVars()...)
- envFile := readEnvFile()
if err := fsys.Init(base.Cwd()); err != nil {
base.Fatalf("go: %v", err)
if *envJson {
var es []cfg.EnvVar
for _, name := range args {
- e := cfg.EnvVar{Name: name, Value: findEnv(env, envFile, name)}
+ e := cfg.EnvVar{Name: name, Value: findEnv(env, name)}
es = append(es, e)
}
printEnvAsJSON(es)
} else {
for _, name := range args {
- fmt.Printf("%s\n", findEnv(env, envFile, name))
+ fmt.Printf("%s\n", findEnv(env, name))
}
}
return
lines := readEnvFileLines(false)
m := make(map[string]string)
for _, line := range lines {
+ line = strings.TrimRight(line, "\r\n")
key := lineToKey(line)
if key == "" {
continue
+# Plain go version
+go version
+! stdout go1\.999
+
+# Default should be auto
+env GOTOOLCHAIN=
+go env GOTOOLCHAIN
+stdout auto
+go env
+stdout GOTOOLCHAIN=.?auto.?
+
+# GOTOOLCHAIN from network, does not exist
+env GOTOOLCHAIN=go1.9999x
+! go version
+stderr 'go: download go1.9999x for .*: toolchain not available'
+
[short] skip
+env GOTOOLCHAIN=
mkdir $WORK/bin
[!GOOS:plan9] env PATH=$WORK/bin${:}$PATH
[GOOS:plan9] env path=$WORK/bin${:}$path
go build -o $WORK/bin/ ./go1.999testpath.go # adds .exe extension implicitly on Windows
-# Plain go version
-go version
-! stdout go1\.999
-
# GOTOOLCHAIN from PATH
env GOTOOLCHAIN=go1.999testpath
go version
stdout 'go1.999testpath here!'
env GODEBUG=
-# GOTOOLCHAIN from network, does not exist
-env GOTOOLCHAIN=go1.9999x
-! go version
-stderr 'go: download go1.9999x for .*: toolchain not available'
-
# GOTOOLCHAIN from network
[!exec:/bin/sh] stop 'the fake proxy serves shell scripts instead of binaries'
env GOTOOLCHAIN=go1.999testmod