aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2024-01-17 15:00:40 -0500
committerBryan Mills <bcmills@google.com>2024-01-18 19:08:14 +0000
commit66d34c7d08d7c536c3165dc49ed318e73ea5acc2 (patch)
treebce953d3841404a9ab9f02d6f8c2494382870d6e
parent5f949c4f2f5c45210612aee87713818a991f6a17 (diff)
downloadgo-66d34c7d08d7c536c3165dc49ed318e73ea5acc2.tar.gz
go-66d34c7d08d7c536c3165dc49ed318e73ea5acc2.zip
cmd/go/internal/modfetch: set protocol.version=2 for shallow git fetches
This works around an apparent bug in the Git HTTP backend, introduced in Git 2.21, that causes responses for the version 1 protocol to provide incomplete tags. For Git commands older than 2.18, this configuration flag is ignored. (Note that Git 2.29 and above already use protocol version 2 by default.) Fixes #56881. Change-Id: I9b241cfb604e5f633ca6a5d799df6706246684a7 Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Reviewed-on: https://go-review.googlesource.com/c/go/+/556358 Run-TryBot: Bryan Mills <bcmills@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Michael Matloob <matloob@golang.org>
-rw-r--r--src/cmd/go/internal/modfetch/codehost/git.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cmd/go/internal/modfetch/codehost/git.go b/src/cmd/go/internal/modfetch/codehost/git.go
index d3a713223c..7d9e5d82f9 100644
--- a/src/cmd/go/internal/modfetch/codehost/git.go
+++ b/src/cmd/go/internal/modfetch/codehost/git.go
@@ -550,7 +550,11 @@ func (r *gitRepo) stat(ctx context.Context, rev string) (info *RevInfo, err erro
if err != nil {
return nil, err
}
- _, err = Run(ctx, r.dir, "git", "fetch", "-f", "--depth=1", r.remote, refspec)
+ // We explicitly set protocol.version=2 for this command to work around
+ // an apparent Git bug introduced in Git 2.21 (commit 61c771),
+ // which causes the handler for protocol version 1 to sometimes miss
+ // tags that point to the requested commit (see https://go.dev/issue/56881).
+ _, err = Run(ctx, r.dir, "git", "fetch", "-f", "-c", "protocol.version=2", "--depth=1", r.remote, refspec)
release()
if err == nil {