]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.19] cmd/go: omit checksums for go.mod files needed for go version...
authorBryan C. Mills <bcmills@google.com>
Thu, 8 Jun 2023 21:55:55 +0000 (17:55 -0400)
committerMichael Pratt <mpratt@google.com>
Tue, 13 Jun 2023 19:31:34 +0000 (19:31 +0000)
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 #60697.
Updates #60667.
Updates #56222.

Change-Id: Ied6ed3e80a62f9cd9a328b43a415a42d14481056
Reviewed-on: https://go-review.googlesource.com/c/go/+/502017
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Bypass: Bryan Mills <bcmills@google.com>

src/cmd/go/internal/modload/init.go
src/cmd/go/testdata/script/mod_sum_issue56222.txt

index 68f5f7ae40e13852226c43e105c866706c69cf4d..ac462138612abc0ca98ce1f944478659f0c8bb38 100644 (file)
@@ -1585,7 +1585,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
@@ -1599,7 +1609,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
                        }
@@ -1659,7 +1669,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
                        }
                }
index 841553941e32a5acd144b6bfca63f05490609262..3183f23e2d15e3ad2e1f257f5f475daa163dc5a4 100644 (file)
@@ -22,6 +22,10 @@ stdout 1.18
 go mod tidy -go=1.19
 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