aboutsummaryrefslogtreecommitdiffstats
path: root/plumbing/transport
diff options
context:
space:
mode:
authorPaulo Gomes <pjbgf@linux.com>2023-07-02 12:05:17 +0100
committerGitHub <noreply@github.com>2023-07-02 12:05:17 +0100
commit99ccca6bc543f88a18df50763d5fc13808e053e4 (patch)
treebb6716d60d897e2c1c5f485509aca30c3bb73f7e /plumbing/transport
parent4e1b9c8c558bceef1c773022c94afd4d746b7b81 (diff)
parentabe49196b80e367f7cc123a095b32958f8d0470b (diff)
downloadgo-git-99ccca6bc543f88a18df50763d5fc13808e053e4.tar.gz
Merge pull request #802 from pjbgf/fix-build
plumbing: http, Fix empty repos on Git v2.41+
Diffstat (limited to 'plumbing/transport')
-rw-r--r--plumbing/transport/http/common.go11
1 files changed, 11 insertions, 0 deletions
diff --git a/plumbing/transport/http/common.go b/plumbing/transport/http/common.go
index f9b7a0e..a7cdc1e 100644
--- a/plumbing/transport/http/common.go
+++ b/plumbing/transport/http/common.go
@@ -73,6 +73,17 @@ func advertisedReferences(ctx context.Context, s *session, serviceName string) (
return nil, err
}
+ // Git 2.41+ returns a zero-id plus capabilities when an empty
+ // repository is being cloned. This skips the existing logic within
+ // advrefs_decode.decodeFirstHash, which expects a flush-pkt instead.
+ //
+ // This logic aligns with plumbing/transport/internal/common/common.go.
+ if ar.IsEmpty() &&
+ // Empty repositories are valid for git-receive-pack.
+ transport.ReceivePackServiceName != serviceName {
+ return nil, transport.ErrEmptyRemoteRepository
+ }
+
transport.FilterUnsupportedCapabilities(ar.Capabilities)
s.advRefs = ar