diff options
author | Junio C Hamano <gitster@pobox.com> | 2024-01-30 13:34:12 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2024-01-30 13:34:12 -0800 |
commit | fa50e7a8a08741c798fa72c1177e78966d0cd553 (patch) | |
tree | 1279366da11a9246909868ab6a63d3d03e4ee7ee /remote-curl.c | |
parent | e14c0ab176054ec47afd1e85445277cacfc060a3 (diff) | |
parent | 176cd68634c4641cc45030dc7f287be47d1809d1 (diff) | |
download | git-fa50e7a8a08741c798fa72c1177e78966d0cd553.tar.gz |
Merge branch 'jx/remote-archive-over-smart-http'
"git archive --remote=<remote>" learned to talk over the smart
http (aka stateless) transport.
* jx/remote-archive-over-smart-http:
transport-helper: call do_take_over() in process_connect
transport-helper: call do_take_over() in connect_helper
http-backend: new rpc-service for git-upload-archive
transport-helper: protocol v2 supports upload-archive
remote-curl: supports git-upload-archive service
transport-helper: no connection restriction in connect_helper
Diffstat (limited to 'remote-curl.c')
-rw-r--r-- | remote-curl.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/remote-curl.c b/remote-curl.c index cb0182b582..1161dc7fed 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -1446,8 +1446,14 @@ static int stateless_connect(const char *service_name) * establish a stateless connection, otherwise we need to tell the * client to fallback to using other transport helper functions to * complete their request. + * + * The "git-upload-archive" service is a read-only operation. Fallback + * to use "git-upload-pack" service to discover protocol version. */ - discover = discover_refs(service_name, 0); + if (!strcmp(service_name, "git-upload-archive")) + discover = discover_refs("git-upload-pack", 0); + else + discover = discover_refs(service_name, 0); if (discover->version != protocol_v2) { printf("fallback\n"); fflush(stdout); @@ -1485,9 +1491,11 @@ static int stateless_connect(const char *service_name) /* * Dump the capability listing that we got from the server earlier - * during the info/refs request. + * during the info/refs request. This does not work with the + * "git-upload-archive" service. */ - write_or_die(rpc.in, discover->buf, discover->len); + if (strcmp(service_name, "git-upload-archive")) + write_or_die(rpc.in, discover->buf, discover->len); /* Until we see EOF keep sending POSTs */ while (1) { |