From: Russ Cox Date: Thu, 1 Jun 2023 18:11:27 +0000 (-0400) Subject: cmd/go: add gover.Max and gover.MaxToolchain X-Git-Tag: go1.21rc1~123 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=936ce874ace0bed17eac20dfa21fe04a45d30603;p=gostls13.git cmd/go: add gover.Max and gover.MaxToolchain I've inlined these by hand enough times now. For #57001. Change-Id: Ia274bd444f12b07ce14eeb2b5a66546880db8f77 Reviewed-on: https://go-review.googlesource.com/c/go/+/499982 Run-TryBot: Russ Cox Reviewed-by: Bryan Mills TryBot-Result: Gopher Robot Auto-Submit: Russ Cox --- diff --git a/src/cmd/go/internal/gover/gover.go b/src/cmd/go/internal/gover/gover.go index fbea612227..247717125b 100644 --- a/src/cmd/go/internal/gover/gover.go +++ b/src/cmd/go/internal/gover/gover.go @@ -55,6 +55,26 @@ func Compare(x, y string) int { return 0 } +// Max returns the maximum of x and y interpreted as toolchain versions, +// compared using Compare. +// If x and y compare equal, Max returns x. +func Max(x, y string) string { + if Compare(x, y) < 0 { + return y + } + return x +} + +// Toolchain returns the maximum of x and y interpreted as toolchain names, +// compared using Compare(FromToolchain(x), FromToolchain(y)). +// If x and y compare equal, Max returns x. +func ToolchainMax(x, y string) string { + if Compare(FromToolchain(x), FromToolchain(y)) < 0 { + return y + } + return x +} + // IsLang reports whether v denotes the overall Go language version // and not a specific release. Starting with the Go 1.21 release, "1.x" denotes // the overall language version; the first release is "1.x.0". diff --git a/src/cmd/go/internal/modget/get.go b/src/cmd/go/internal/modget/get.go index 0cf3c1dc84..8a8b8dea22 100644 --- a/src/cmd/go/internal/modget/get.go +++ b/src/cmd/go/internal/modget/get.go @@ -1233,8 +1233,8 @@ func (r *resolver) resolveQueries(ctx context.Context, queries []*query) (change goVers := "" for _, q := range queries { for _, cs := range q.candidates { - if e := (*gover.TooNewError)(nil); errors.As(cs.err, &e) && gover.Compare(goVers, e.GoVersion) < 0 { - goVers = e.GoVersion + if e := (*gover.TooNewError)(nil); errors.As(cs.err, &e) { + goVers = gover.Max(goVers, e.GoVersion) } } }