From e85e9bcdd673cdc0ac64c3054d678cb16e2372e5 Mon Sep 17 00:00:00 2001 From: qiulaidongfeng <2645477756@qq.com> Date: Wed, 22 May 2024 06:51:29 +0800 Subject: [PATCH 1/5] cmd/go: set GOPROXY and GOSUMDB default value correctly From go.env file got GOPROXY and GOSUMDB default value. FIxes #67542 Change-Id: Ifaeb59121b5b2c4937e8aaecb4ed291d95987e4c --- src/cmd/go/internal/cfg/cfg.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go index 002d0006ed41fc..c0f763e44dfcc6 100644 --- a/src/cmd/go/internal/cfg/cfg.go +++ b/src/cmd/go/internal/cfg/cfg.go @@ -422,8 +422,8 @@ var ( GORISCV64, goRISCV64Changed = EnvOrAndChanged("GORISCV64", fmt.Sprintf("rva%du64", buildcfg.GORISCV64)) GOWASM, goWASMChanged = EnvOrAndChanged("GOWASM", fmt.Sprint(buildcfg.GOWASM)) - GOPROXY, GOPROXYChanged = EnvOrAndChanged("GOPROXY", "") - GOSUMDB, GOSUMDBChanged = EnvOrAndChanged("GOSUMDB", "") + GOPROXY, GOPROXYChanged = EnvOrAndChanged("GOPROXY", envCache.m["GOPROXY"]) + GOSUMDB, GOSUMDBChanged = EnvOrAndChanged("GOSUMDB", envCache.m["GOSUMDB"]) GOPRIVATE = Getenv("GOPRIVATE") GONOPROXY, GONOPROXYChanged = EnvOrAndChanged("GONOPROXY", GOPRIVATE) GONOSUMDB, GONOSUMDBChanged = EnvOrAndChanged("GONOSUMDB", GOPRIVATE) From 5c2137862f3cde60b1abc3130e3a75c051b3549f Mon Sep 17 00:00:00 2001 From: qiulaidongfeng <2645477756@qq.com> Date: Wed, 22 May 2024 16:39:47 +0800 Subject: [PATCH 2/5] n Change-Id: I67a177be94073863514ba255a71a9e469a8a6743 --- src/cmd/go/internal/cfg/cfg.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go index c0f763e44dfcc6..98c118cee872d0 100644 --- a/src/cmd/go/internal/cfg/cfg.go +++ b/src/cmd/go/internal/cfg/cfg.go @@ -285,8 +285,9 @@ var OrigEnv []string var CmdEnv []EnvVar var envCache struct { - once sync.Once - m map[string]string + once sync.Once + m map[string]string + goroot map[string]string } // EnvFile returns the name of the Go environment configuration file, @@ -310,6 +311,7 @@ func EnvFile() (string, bool, error) { func initEnvCache() { envCache.m = make(map[string]string) + envCache.goroot = make(map[string]string) if file, _, _ := EnvFile(); file != "" { readEnvFile(file, "user") } @@ -363,6 +365,9 @@ func readEnvFile(file string, source string) { } } envCache.m[string(key)] = string(val) + if source == "GOROOT" { + envCache.goroot[string(key)] = string(val) + } } } @@ -422,8 +427,8 @@ var ( GORISCV64, goRISCV64Changed = EnvOrAndChanged("GORISCV64", fmt.Sprintf("rva%du64", buildcfg.GORISCV64)) GOWASM, goWASMChanged = EnvOrAndChanged("GOWASM", fmt.Sprint(buildcfg.GOWASM)) - GOPROXY, GOPROXYChanged = EnvOrAndChanged("GOPROXY", envCache.m["GOPROXY"]) - GOSUMDB, GOSUMDBChanged = EnvOrAndChanged("GOSUMDB", envCache.m["GOSUMDB"]) + GOPROXY, GOPROXYChanged = EnvOrAndChanged("GOPROXY", envCache.goroot["GOPROXY"]) + GOSUMDB, GOSUMDBChanged = EnvOrAndChanged("GOSUMDB", envCache.goroot["GOSUMDB"]) GOPRIVATE = Getenv("GOPRIVATE") GONOPROXY, GONOPROXYChanged = EnvOrAndChanged("GONOPROXY", GOPRIVATE) GONOSUMDB, GONOSUMDBChanged = EnvOrAndChanged("GONOSUMDB", GOPRIVATE) From 92c806dd89a2abc64d169812ece9ab431648e929 Mon Sep 17 00:00:00 2001 From: qiulaidongfeng <2645477756@qq.com> Date: Thu, 23 May 2024 07:20:11 +0800 Subject: [PATCH 3/5] n Change-Id: Ief0b0c55212f3519a216a2eb03f173403b276cdd --- src/cmd/go/internal/cfg/cfg.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go index 98c118cee872d0..6c488e34af5fd5 100644 --- a/src/cmd/go/internal/cfg/cfg.go +++ b/src/cmd/go/internal/cfg/cfg.go @@ -359,15 +359,13 @@ func readEnvFile(file string, source string) { key, val := line[:i], line[i+1:] if source == "GOROOT" { + envCache.goroot[string(key)] = string(val) // In the GOROOT/go.env file, do not overwrite fields loaded from the user's go/env file. if _, ok := envCache.m[string(key)]; ok { continue } } envCache.m[string(key)] = string(val) - if source == "GOROOT" { - envCache.goroot[string(key)] = string(val) - } } } From 2723b67490bc9d5e86d7cdc9e8e5d42f1a40cba8 Mon Sep 17 00:00:00 2001 From: qiulaidongfeng <2645477756@qq.com> Date: Thu, 23 May 2024 18:26:06 +0800 Subject: [PATCH 4/5] n Change-Id: I09c2efbc46bf7b09accc5e086c341d218e6048d0 --- src/cmd/go/internal/cfg/cfg.go | 14 ++++++++++---- src/cmd/go/internal/envcmd/env.go | 6 ++---- src/cmd/go/testdata/script/env_changed.txt | 11 +++++++++++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go index 6c488e34af5fd5..f021d6b726d115 100644 --- a/src/cmd/go/internal/cfg/cfg.go +++ b/src/cmd/go/internal/cfg/cfg.go @@ -425,8 +425,8 @@ var ( GORISCV64, goRISCV64Changed = EnvOrAndChanged("GORISCV64", fmt.Sprintf("rva%du64", buildcfg.GORISCV64)) GOWASM, goWASMChanged = EnvOrAndChanged("GOWASM", fmt.Sprint(buildcfg.GOWASM)) - GOPROXY, GOPROXYChanged = EnvOrAndChanged("GOPROXY", envCache.goroot["GOPROXY"]) - GOSUMDB, GOSUMDBChanged = EnvOrAndChanged("GOSUMDB", envCache.goroot["GOSUMDB"]) + GOPROXY, GOPROXYChanged = EnvOrAndChanged("GOPROXY", "") + GOSUMDB, GOSUMDBChanged = EnvOrAndChanged("GOSUMDB", "") GOPRIVATE = Getenv("GOPRIVATE") GONOPROXY, GONOPROXYChanged = EnvOrAndChanged("GONOPROXY", GOPRIVATE) GONOSUMDB, GONOSUMDBChanged = EnvOrAndChanged("GONOSUMDB", GOPRIVATE) @@ -436,10 +436,16 @@ var ( // EnvOrAndChanged returns the environment variable value // and reports whether it differs from the default value. -func EnvOrAndChanged(name, def string) (string, bool) { +func EnvOrAndChanged(name, def string) (v string, changed bool) { val := Getenv(name) if val != "" { - return val, val != def + v = val + if g, ok := envCache.goroot[name]; ok { + changed = val != g + } else { + changed = val != def + } + return } return def, false } diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go index c4836b2f952888..994853d645e260 100644 --- a/src/cmd/go/internal/envcmd/env.go +++ b/src/cmd/go/internal/envcmd/env.go @@ -106,7 +106,7 @@ func MkEnv() []cfg.EnvVar { {Name: "GOROOT", Value: cfg.GOROOT}, {Name: "GOSUMDB", Value: cfg.GOSUMDB, Changed: cfg.GOSUMDBChanged}, {Name: "GOTMPDIR", Value: cfg.Getenv("GOTMPDIR")}, - {Name: "GOTOOLCHAIN", Value: cfg.Getenv("GOTOOLCHAIN")}, + {Name: "GOTOOLCHAIN"}, {Name: "GOTOOLDIR", Value: build.ToolDir}, {Name: "GOVCS", Value: cfg.GOVCS}, {Name: "GOVERSION", Value: runtime.Version()}, @@ -128,9 +128,7 @@ func MkEnv() []cfg.EnvVar { case "GOCACHE": env[i].Value, env[i].Changed = cache.DefaultDir() case "GOTOOLCHAIN": - if env[i].Value != "auto" { - env[i].Changed = true - } + env[i].Value, env[i].Changed = cfg.EnvOrAndChanged("GOTOOLCHAIN", "auto") case "GODEBUG": env[i].Changed = env[i].Value != "" } diff --git a/src/cmd/go/testdata/script/env_changed.txt b/src/cmd/go/testdata/script/env_changed.txt index 7b7b154dae6bf9..a3d368cd39e480 100644 --- a/src/cmd/go/testdata/script/env_changed.txt +++ b/src/cmd/go/testdata/script/env_changed.txt @@ -43,3 +43,14 @@ go env -changed -json GOOS go env -changed -json GOARCH [GOARCH:amd64] stdout '"GOARCH": "arm64"' [!GOARCH:amd64] stdout '"GOARCH": "amd64"' + +env GOROOT=./a +env GOPROXY=s +go env -changed GOPROXY +! stdout 'GOPROXY' +env GOPROXY=s2 +go env -changed GOPROXY +stdout 'GOPROXY=''?s2''?' + +-- a/go.env -- +GOPROXY=s From fda9be48b9e3bd3b124648eec1ef4ecfccac6d50 Mon Sep 17 00:00:00 2001 From: qiulaidongfeng <2645477756@qq.com> Date: Fri, 24 May 2024 03:08:57 +0800 Subject: [PATCH 5/5] n Change-Id: Ibba8cc78f8a16f4ce973bc6be60db1c473f768a9 --- src/cmd/go/internal/cfg/cfg.go | 2 +- src/cmd/go/internal/envcmd/env.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go index f021d6b726d115..3715a19a96dfaa 100644 --- a/src/cmd/go/internal/cfg/cfg.go +++ b/src/cmd/go/internal/cfg/cfg.go @@ -445,7 +445,7 @@ func EnvOrAndChanged(name, def string) (v string, changed bool) { } else { changed = val != def } - return + return v, changed } return def, false } diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go index 994853d645e260..f19577c4df1875 100644 --- a/src/cmd/go/internal/envcmd/env.go +++ b/src/cmd/go/internal/envcmd/env.go @@ -128,7 +128,7 @@ func MkEnv() []cfg.EnvVar { case "GOCACHE": env[i].Value, env[i].Changed = cache.DefaultDir() case "GOTOOLCHAIN": - env[i].Value, env[i].Changed = cfg.EnvOrAndChanged("GOTOOLCHAIN", "auto") + env[i].Value, env[i].Changed = cfg.EnvOrAndChanged("GOTOOLCHAIN", "") case "GODEBUG": env[i].Changed = env[i].Value != "" }