Skip to content

Commit ab44565

Browse files
rscmknyszek
authored andcommitted
[release-branch.go1.23] cmd/go/internal/modfetch: do not trust server to send all tags in shallow fetch
Newer git versions (at least git 2.47.1) do not send all the matching tags for a shallow fetch of a specific hash anymore. The go command assumes that git servers do this. Since that assumption is broken, use the local copy of the remote refs list to augment the tags sent by the server. This makes the cmd/go/internal/modfetch tests pass again with newer git. For #71261 Fixes #71263 Change-Id: I9fd4f3fd7beeb68a522938599f8f3acd887d0b26 Reviewed-on: https://go-review.googlesource.com/c/go/+/642437 Reviewed-by: Michael Matloob <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]> Auto-Submit: Russ Cox <[email protected]> (cherry picked from commit bd80d89) Reviewed-on: https://go-review.googlesource.com/c/go/+/642696 Reviewed-by: Michael Knyszek <[email protected]> Reviewed-by: Russ Cox <[email protected]>
1 parent 9cbbf5e commit ab44565

File tree

1 file changed

+15
-1
lines changed
  • src/cmd/go/internal/modfetch/codehost

1 file changed

+15
-1
lines changed

src/cmd/go/internal/modfetch/codehost/git.go

+15-1
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,21 @@ func (r *gitRepo) statLocal(ctx context.Context, version, rev string) (*RevInfo,
662662
}
663663
}
664664
}
665-
sort.Strings(info.Tags)
665+
666+
// Git 2.47.1 does not send the tags during shallow clone anymore
667+
// (perhaps the exact version that changed behavior is an earlier one),
668+
// so we have to also add tags from the refs list we fetched with ls-remote.
669+
if refs, err := r.loadRefs(ctx); err == nil {
670+
for ref, h := range refs {
671+
if h == hash {
672+
if tag, found := strings.CutPrefix(ref, "refs/tags/"); found {
673+
info.Tags = append(info.Tags, tag)
674+
}
675+
}
676+
}
677+
}
678+
slices.Sort(info.Tags)
679+
info.Tags = slices.Compact(info.Tags)
666680

667681
// Used hash as info.Version above.
668682
// Use caller's suggested version if it appears in the tag list

0 commit comments

Comments
 (0)