]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/modfetch: always allow Stat for the current toolchain to succeed
authorBryan C. Mills <bcmills@google.com>
Thu, 13 Jul 2023 14:12:33 +0000 (10:12 -0400)
committerGopher Robot <gobot@golang.org>
Thu, 13 Jul 2023 16:44:24 +0000 (16:44 +0000)
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 <cherryyz@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Bryan Mills <bcmills@google.com>

src/cmd/go/internal/modfetch/toolchain.go

index 1669ab92e701185bf0ff3a797aabf097ac6dbcd6..0d7cfcfe7d10734caa8c4616cf7492b13b21a855 100644 (file)
@@ -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)
        }