From: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> Enable stateless-rpc connection in "connect_helper()", and add support for remote archive from a stateless transport. range-diff v1...v2: 1: 4457ca910b ! 1: 6fabd4dcab transport-helper: no connection restriction in connect_helper @@ Metadata ## Commit message ## transport-helper: no connection restriction in connect_helper - For protocol-v2, "stateless-connection" can be used to establish a - stateless connection between the client and the server, but trying to - establish http connection by calling "transport->vtable->connect" will - fail. This restriction was first introduced in commit b236752a87 - (Support remote archive from all smart transports, 2009-12-09) by - adding a limitation in the "connect_helper()" function. + When commit b236752a (Support remote archive from all smart transports, + 2009-12-09) added "remote archive" support for "smart transports", it + was for transport that supports the ".connect" method. The + "connect_helper()" function protected itself from getting called for a + transport without the method before calling process_connect_service(), + which did not work with such a transport. - Remove the restriction in the "connect_helper()" function and use the - logic in the "process_connect_service()" function to check the protocol - version and service name. By this way, we can make a connection and do - something useful. E.g., in a later commit, implements remote archive - for a repository over HTTP protocol. + 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, which + process_connect_service() was taught to handle the "stateless" + connection, making the old safety valve in its caller that insisted + that ".connect" method must be defined too strict, and forgot to loosen + it. + 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. + + Helped-by: Junio C Hamano <gitster@xxxxxxxxx> Signed-off-by: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> ## transport-helper.c ## -: ---------- > 2: 1d687abc7e transport-helper: run do_take_over in connect_helper 2: d4242d1f27 ! 3: 051d66f48e archive: support remote archive from stateless transport @@ Commit message 1. Add support for "git-upload-archive" service in "http-backend". - 2. Unable to access the URL ".../info/refs?service=git-upload-archive" - to detect the protocol version, use the "git-upload-pack" service - instead. + 2. Use the URL ".../info/refs?service=git-upload-pack" to detect the + protocol version, instead of use the "git-upload-archive" service. - 3. "git-archive" does not resolve the protocol version and capabilities - when connecting to remote-helper, so the remote-helper should not - send them. - - 4. "git-archive" may not be able to disconnect the stateless - connection. Run "do_take_over()" to take_over the transfer for - a graceful disconnect function. + 3. "git-archive" does not expect to see protocol version and + capabilities when connecting to remote-helper, so do not send them + in "remote-curl.c" for the "git-upload-archive" service. Signed-off-by: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> @@ transport-helper.c: static int process_connect_service(struct transport *transpo strbuf_addf(&cmdbuf, "stateless-connect %s\n", name); ret = run_connect(transport, &cmdbuf); if (ret) -@@ transport-helper.c: static int connect_helper(struct transport *transport, const char *name, - - fd[0] = data->helper->out; - fd[1] = data->helper->in; -+ -+ do_take_over(transport); - return 0; - } - Jiang Xin (3): transport-helper: no connection restriction in connect_helper transport-helper: run do_take_over in connect_helper archive: support remote archive from stateless transport http-backend.c | 15 +++++++++++++-- remote-curl.c | 14 +++++++++++--- t/t5003-archive-zip.sh | 30 ++++++++++++++++++++++++++++++ transport-helper.c | 7 ++++--- 4 files changed, 58 insertions(+), 8 deletions(-) -- 2.40.1.50.gf560bcc116.dirty