[PATCH v2 0/3] support remote archive from stateless transport
- From
Jiang Xin <worldhello.net@gmail.com>
- Date
- Sep 23, 2023, 15:21 UTC
- Message-ID
- <20230923152201.14741-1-worldhello.net@gmail.com>
- In-Reply-To
- <xmqqy1h2f5dv.fsf@gitster.g>
From: Jiang Xin <zhiyou.jx@alibaba-inc.com>
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@pobox.com>
Signed-off-by: Jiang Xin <zhiyou.jx@alibaba-inc.com>
## 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@alibaba-inc.com>
@@ 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