On Wed, Sep 20, 2023 at 1:19 AM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Jiang Xin <worldhello.net@xxxxxxxxx> writes: > > > From: Jiang Xin <zhiyou.jx@xxxxxxxxxxxxxxx> > > > > 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. > > The above description may not be technically wrong per-se, but I > found it confusing. The ".connect method must be defined" you are > removing was added back when there was no "stateless" variant of the > connection initiation. Many codepaths added by that patch did "if > .connect is there, call it, but otherwise die()" and I think the > code you were removing was added as a safety valve, not a limitation > or restriction. Later, process_connect_service() learned to handle > the .stateless_connect bit as a fallback for transports without > .connect method defined, and the commit added that feature, edc9caf7 > (transport-helper: introduce stateless-connect, 2018-03-15), forgot > that the caller did not allow this fallback. > > When 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. connect_helper() function protected itself > from getting called for a transport without the method > before calling process_connect_service(), which did not work > wuth such a transport. > > Later, 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, 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. > > or something along that line would have been easire to follow, at > least to me. > These explanations are very clear and helpful, thank you. -- Jiang Xin