From: Bryan C. Mills Date: Thu, 13 Jul 2023 14:12:33 +0000 (-0400) Subject: cmd/go/internal/modfetch: always allow Stat for the current toolchain to succeed X-Git-Tag: go1.21rc3~1^2 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=b88bd917b8dd8aabc471b1de41b3ee8c0d6eeabe;p=gostls13.git cmd/go/internal/modfetch: always allow Stat for the current toolchain to succeed This fixes a failure mode observed in TestScript/gotoolchain_version when building go1.21rc3. Updates #61259. Change-Id: Ifb14a5b94b687adea7a26c1155591e3ae75b7a62 Reviewed-on: https://go-review.googlesource.com/c/go/+/509217 Reviewed-by: Cherry Mui Auto-Submit: Bryan Mills TryBot-Result: Gopher Robot Reviewed-by: Russ Cox Run-TryBot: Bryan Mills --- diff --git a/src/cmd/go/internal/modfetch/toolchain.go b/src/cmd/go/internal/modfetch/toolchain.go index 1669ab92e7..0d7cfcfe7d 100644 --- a/src/cmd/go/internal/modfetch/toolchain.go +++ b/src/cmd/go/internal/modfetch/toolchain.go @@ -98,13 +98,23 @@ func (r *toolchainRepo) Stat(ctx context.Context, rev string) (*RevInfo, error) if !gover.IsValid(v) { return nil, fmt.Errorf("invalid %s version %s", r.path, rev) } + // If we're asking about "go" (not "toolchain"), pretend to have // all earlier Go versions available without network access: // we will provide those ourselves, at least in GOTOOLCHAIN=auto mode. if r.path == "go" && gover.Compare(v, gover.Local()) <= 0 { return &RevInfo{Version: prefix + v}, nil } + + // Similarly, if we're asking about *exactly* the current toolchain, + // we don't need to access the network to know that it exists. + if r.path == "toolchain" && v == gover.Local() { + return &RevInfo{Version: prefix + v}, nil + } + if gover.IsLang(v) { + // We can only use a language (development) version if the current toolchain + // implements that version, and the two checks above have ruled that out. return nil, fmt.Errorf("go language version %s is not a toolchain version", rev) }