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:
parent
b3c0fe1d14
commit
1dcbd8dc58
@ -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
|
||||
|
8
src/cmd/go/testdata/mod/example.com_incompatiblewithsub_v1.0.0.txt
vendored
Normal file
8
src/cmd/go/testdata/mod/example.com_incompatiblewithsub_v1.0.0.txt
vendored
Normal 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
|
8
src/cmd/go/testdata/mod/example.com_incompatiblewithsub_v2.0.0+incompatible.txt
vendored
Normal file
8
src/cmd/go/testdata/mod/example.com_incompatiblewithsub_v2.0.0+incompatible.txt
vendored
Normal 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
|
29
src/cmd/go/testdata/script/mod_get_prefer_incompatible.txt
vendored
Normal file
29
src/cmd/go/testdata/script/mod_get_prefer_incompatible.txt
vendored
Normal 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"
|
Loading…
Reference in New Issue
Block a user