diff options
author | Bryan C. Mills <bcmills@google.com> | 2023-06-08 17:55:55 -0400 |
---|---|---|
committer | Michael Pratt <mpratt@google.com> | 2023-06-13 19:31:43 +0000 |
commit | 8b3acefcbec3b861b8be9a37229a3d1329a9df1d (patch) | |
tree | 7b2015ddb18b3de708c7d2a740e8e2e8e4411369 | |
parent | 1008486a9ff979dbd21c7466eeb6abf378f9c637 (diff) | |
download | go-8b3acefcbec3b861b8be9a37229a3d1329a9df1d.tar.gz go-8b3acefcbec3b861b8be9a37229a3d1329a9df1d.zip |
[release-branch.go1.20] cmd/go: omit checksums for go.mod files needed for go version lines more often in pre-1.21 modules
This updates the logic from CL 489075 to avoid trying to save extra
sums if they aren't already expected to be present
and cfg.BuildMod != "mod" (as in the case of "go list -m -u all" with
a go.mod file that specifies go < 1.21).
Fixes #60698.
Updates #60667.
Updates #56222.
Change-Id: Ied6ed3e80a62f9cd9a328b43a415a42d14481056
Reviewed-on: https://go-review.googlesource.com/c/go/+/502016
Reviewed-by: Russ Cox <rsc@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Bryan Mills <bcmills@google.com>
-rw-r--r-- | src/cmd/go/internal/modload/init.go | 18 | ||||
-rw-r--r-- | src/cmd/go/testdata/script/mod_sum_issue56222.txt | 4 |
2 files changed, 19 insertions, 3 deletions
diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go index 9f07658d81..58074bbbcc 100644 --- a/src/cmd/go/internal/modload/init.go +++ b/src/cmd/go/internal/modload/init.go @@ -1597,7 +1597,17 @@ func keepSums(ctx context.Context, ld *loader, rs *Requirements, which whichSums // paths of loaded packages. We need to retain sums for all of these modules — // not just the modules containing the actual packages — in order to rule out // ambiguous import errors the next time we load the package. - if ld != nil { + keepModSumsForZipSums := true + if ld == nil { + if cfg.BuildMod != "mod" && semver.Compare("v"+MainModules.GoVersion(), tidyGoModSumVersionV) < 0 { + keepModSumsForZipSums = false + } + } else { + keepPkgGoModSums := true + if (ld.Tidy || cfg.BuildMod != "mod") && semver.Compare("v"+ld.GoVersion, tidyGoModSumVersionV) < 0 { + keepPkgGoModSums = false + keepModSumsForZipSums = false + } for _, pkg := range ld.pkgs { // We check pkg.mod.Path here instead of pkg.inStd because the // pseudo-package "C" is not in std, but not provided by any module (and @@ -1611,7 +1621,7 @@ func keepSums(ctx context.Context, ld *loader, rs *Requirements, which whichSums // However, we didn't do so before Go 1.21, and the bug is relatively // minor, so we maintain the previous (buggy) behavior in 'go mod tidy' to // avoid introducing unnecessary churn. - if !ld.Tidy || semver.Compare("v"+ld.GoVersion, tidyGoModSumVersionV) >= 0 { + if keepPkgGoModSums { r := resolveReplacement(pkg.mod) keep[modkey(r)] = true } @@ -1671,7 +1681,9 @@ func keepSums(ctx context.Context, ld *loader, rs *Requirements, which whichSums if which == addBuildListZipSums { for _, m := range mg.BuildList() { r := resolveReplacement(m) - keep[modkey(r)] = true // we need the go version from the go.mod file to do anything useful with the zipfile + if keepModSumsForZipSums { + keep[modkey(r)] = true // we need the go version from the go.mod file to do anything useful with the zipfile + } keep[r] = true } } diff --git a/src/cmd/go/testdata/script/mod_sum_issue56222.txt b/src/cmd/go/testdata/script/mod_sum_issue56222.txt index 4c071c11db..e4a468cfd5 100644 --- a/src/cmd/go/testdata/script/mod_sum_issue56222.txt +++ b/src/cmd/go/testdata/script/mod_sum_issue56222.txt @@ -23,6 +23,10 @@ stdout 1.18 go mod tidy -go=1.20 go clean -modcache # Remove checksums from the module cache, so that only go.sum is used. +# Issue 60667: 'go list' without -mod=mod shouldn't report the checksums as +# dirty either. +go list -m -u all + env OLDSUMDB=$GOSUMDB env GOSUMDB=bad go mod tidy |