1
0
mirror of https://github.com/golang/go synced 2024-11-23 16:40:03 -07:00

cmd/go/internal/modload: make QueryPattern consider current versions

QueryPattern will now look up the current version of a module (if any)
before invoking queryProxy. This changes the interpretation of some
patterns (like "upgrade") and avoids the need to download earlier
versions for earlier versions when the current version is
+incompatible.

Fixes #37574

Change-Id: I4089d6099236493df13a7f88a252b5e5e556d383
Reviewed-on: https://go-review.googlesource.com/c/go/+/231599
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Jay Conrod 2020-05-01 15:30:58 -04:00
parent b3c0fe1d14
commit 1dcbd8dc58
4 changed files with 56 additions and 1 deletions

View File

@ -455,8 +455,9 @@ func QueryPattern(pattern, query string, allowed func(module.Version) bool) ([]Q
err := modfetch.TryProxies(func(proxy string) error {
queryModule := func(path string) (r QueryResult, err error) {
current := findCurrentVersion(path)
r.Mod.Path = path
r.Rev, err = queryProxy(proxy, path, query, "", allowed)
r.Rev, err = queryProxy(proxy, path, query, current, allowed)
if err != nil {
return r, err
}
@ -508,6 +509,15 @@ func modulePrefixesExcludingTarget(path string) []string {
return prefixes
}
func findCurrentVersion(path string) string {
for _, m := range buildList {
if m.Path == path {
return m.Version
}
}
return ""
}
type prefixResult struct {
QueryResult
err error

View File

@ -0,0 +1,8 @@
Module example.com/incompatiblewithsub has an incompatible version
and a package in a subdirectory.
-- .info --
{"Version":"v1.0.0"}
-- .mod --
module example.com/incompatiblewithsub
-- sub/sub.go --
package sub

View File

@ -0,0 +1,8 @@
Module example.com/incompatiblewithsub has an incompatible version
and a package in a subdirectory.
-- .info --
{"Version":"v2.0.0+incompatible"}
-- .mod --
module example.com/incompatiblewithsub
-- sub/sub.go --
package sub

View File

@ -0,0 +1,29 @@
# Verifies golang.org/issue/37574.
# If we are already using an +incompatible version, we shouldn't look up
# a lower compatible version when upgrading.
cp go.mod go.mod.orig
go mod tidy
cmp go.mod.orig go.mod
grep '^example.com/incompatiblewithsub v2\.0\.0\+incompatible' go.sum
! grep '^example.com/incompatiblewithsub v1.0.0' go.sum
go get -d example.com/incompatiblewithsub/sub
cmp go.mod.orig go.mod
! grep '^example.com/incompatiblewithsub v1.0.0' go.sum
# TODO(golang.org/issue/31580): the 'go get' command above should not change
# go.sum. However, as part of the query above, we download example.com@v1.0.0,
# an unrelated module, since it's a possible prefix. The sum for that module
# should not be written to go.sum.
-- go.mod --
module m
go 1.15
require example.com/incompatiblewithsub v2.0.0+incompatible
-- use.go --
package use
import _ "example.com/incompatiblewithsub/sub"