]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/modfetch: set protocol.version=2 for shallow git fetches
authorBryan C. Mills <bcmills@google.com>
Wed, 17 Jan 2024 20:00:40 +0000 (15:00 -0500)
committerBryan Mills <bcmills@google.com>
Thu, 18 Jan 2024 19:08:14 +0000 (19:08 +0000)
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>
src/cmd/go/internal/modfetch/codehost/git.go

index d3a713223c34c7f9d1316fab6d488a561d7eb3ce..7d9e5d82f9cc56a65b0505bb017f489d03a2aa0a 100644 (file)
@@ -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 {