From: Russ Cox Date: Thu, 13 Nov 2025 16:43:55 +0000 (-0500) Subject: cmd/go/internal/modfetch/codehost: fix flaky TestReadZip X-Git-Tag: go1.26rc1~301 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=028375323f;p=gostls13.git cmd/go/internal/modfetch/codehost: fix flaky TestReadZip In normal use by the go command, ReadZip always happens after Stat, which makes sure that the relevant revision has been fetched to local disk. But TestReadZip calls ReadZip directly, and ReadZip was not ensuring that fetch had happened. This made 'go test' pass (because other earlier tests had done Stat of the hg test repo) but 'go test -run=ReadZip' fail by itself. And on big enough machines, the tests that were doing the Stat were running in parallel with ReadZip, causing non-deterministic failures depending on whether the Stat completed before ReadZip started. Fix the race by calling Stat directly in ReadZip, like we already do in ReadFile. Fixes longtest builder flake. Change-Id: Ib42f64876b7ef51d8148c616539b412b42f8b24e Reviewed-on: https://go-review.googlesource.com/c/go/+/720280 Reviewed-by: David Chase Reviewed-by: Michael Matloob Reviewed-by: Michael Matloob LUCI-TryBot-Result: Go LUCI --- diff --git a/src/cmd/go/internal/modfetch/codehost/vcs.go b/src/cmd/go/internal/modfetch/codehost/vcs.go index ab04b2e96d..aae1a60bfa 100644 --- a/src/cmd/go/internal/modfetch/codehost/vcs.go +++ b/src/cmd/go/internal/modfetch/codehost/vcs.go @@ -624,15 +624,20 @@ func (r *vcsRepo) ReadZip(ctx context.Context, rev, subdir string, maxSize int64 return nil, vcsErrorf("vcs %s: ReadZip: %w", r.cmd.vcs, errors.ErrUnsupported) } + if rev == "latest" { + rev = r.cmd.latest + } + _, err = r.Stat(ctx, rev) // download rev into local repo + if err != nil { + return nil, err + } + unlock, err := r.mu.Lock() if err != nil { return nil, err } defer unlock() - if rev == "latest" { - rev = r.cmd.latest - } f, err := os.CreateTemp("", "go-readzip-*.zip") if err != nil { return nil, err