From: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> "git archive --remote=<remote>" learned to talk over the smart http (aka stateless) transport. # Changes since v5 Change commit messages. # range-diff v5...v6 1: f3fef46c05 ! 1: d75e6d27ac transport-helper: no connection restriction in connect_helper @@ Commit message Later, commit edc9caf7 (transport-helper: introduce stateless-connect, 2018-03-15) added a way for a transport without the ".connect" method - to establish a "stateless" connection in protocol-v2, where + to establish a "stateless" connection in protocol v2, where process_connect_service() was taught to handle the ".stateless_connect" method, making the old protection too strict. But commit edc9caf7 forgot - to adjust this protection accordingly. + to adjust this protection accordingly. Even at the time of commit + b236752a, this protection seemed redundant, since + process_connect_service() would return 0 if the connection could not be + established, and connect_helper() would still die() early. - Remove the restriction in the "connect_helper()" function and give the - function "process_connect_service()" the opportunity to establish a - connection using ".connect" or ".stateless_connect" for protocol v2. So - we can connect with a stateless-rpc and do something useful. E.g., in a - later commit, implements remote archive for a repository over HTTP - protocol. + Remove the restriction in connect_helper() and give the function + process_connect_service() the opportunity to establish a connection + using ".connect" or ".stateless_connect" for protocol v2. So we can + connect with a stateless-rpc and do something useful. E.g., in a later + commit, implements remote archive for a repository over HTTP protocol. Helped-by: Junio C Hamano <gitster@xxxxxxxxx> Helped-by: Linus Arver <linusa@xxxxxxxxxx> 2: 6be331b22d ! 2: 320526dc56 remote-curl: supports git-upload-archive service @@ Commit message Add new service (git-upload-archive) support in remote-curl, so we can support remote archive over HTTP/HTTPS protocols. Differences between - git-upload-archive and other serices: + git-upload-archive and other services: 1. The git-archive program does not expect to see protocol version and capabilities when connecting to remote-helper, so do not send them in remote-curl for the git-upload-archive service. - 2. We need to detect protocol version by calling discover_refs(), + 2. We need to detect protocol version by calling discover_refs(). Fallback to use the git-upload-pack service (which, like git-upload-archive, is a read-only operation) to discover protocol version. + Helped-by: Linus Arver <linusa@xxxxxxxxxx> Signed-off-by: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> ## remote-curl.c ## 3: aabc8e1a2a ! 3: 72e575d28a transport-helper: protocol-v2 supports upload-archive @@ Metadata Author: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> ## Commit message ## - transport-helper: protocol-v2 supports upload-archive + transport-helper: protocol v2 supports upload-archive - We used to support only git-upload-pack service for protocol-v2. In + We used to support only git-upload-pack service for protocol v2. In order to support remote archive over HTTP/HTTPS protocols, add new - service support for git-upload-archive in protocol-v2. + service support for git-upload-archive in protocol v2. + Helped-by: Linus Arver <linusa@xxxxxxxxxx> Signed-off-by: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> ## transport-helper.c ## 4: fdab4abb43 = 4: 390d13c074 http-backend: new rpc-service for git-upload-archive 5: 6ac0c8e105 ! 5: 1c9f7755d3 transport-helper: call do_take_over() in connect_helper @@ Commit message After successfully connecting to the smart transport by calling process_connect_service() in connect_helper(), run do_take_over() to replace the old vtable with a new one which has methods ready for the - smart transport connection. This will fix the exit code of git-archive + smart transport connection. This fixes the exit code of git-archive in test case "archive remote http repository" of t5003. The connect_helper() function is used as the connect method of the @@ Commit message do_take_over(), it may fail to call transport_disconnect() in run_remote_archiver() of "builtin/archive.c". This is because for a stateless connection and a service like "git-upload-archive", the - remote helper may receive a SIGPIPE signal and exit early. To have a - graceful disconnect method by calling do_take_over() will solve this - issue. + remote helper may receive a SIGPIPE signal and exit early. Call + do_take_over() to have a graceful disconnect method, so that we still + call transport_disconnect() even if the remote helper exits early. Helped-by: Linus Arver <linusa@xxxxxxxxxx> Signed-off-by: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> 6: 423a89c593 = 6: 18bc8753df transport-helper: call do_take_over() in process_connect --- Jiang Xin (6): transport-helper: no connection restriction in connect_helper remote-curl: supports git-upload-archive service transport-helper: protocol v2 supports upload-archive http-backend: new rpc-service for git-upload-archive transport-helper: call do_take_over() in connect_helper transport-helper: call do_take_over() in process_connect http-backend.c | 13 ++++++++++--- remote-curl.c | 14 +++++++++++--- t/t5003-archive-zip.sh | 34 ++++++++++++++++++++++++++++++++++ transport-helper.c | 29 +++++++++++++---------------- 4 files changed, 68 insertions(+), 22 deletions(-) -- 2.43.0