fetch-pack: Implement no-done capability
authorShawn O. Pearce <spearce@spearce.org>
Tue, 15 Mar 2011 00:59:39 +0000 (17:59 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 15 Mar 2011 19:11:28 +0000 (12:11 -0700)
commit761ecf0bc7b6cddf311f00877c59e6381cdbdeea
treec3bda9a1b38740845d0e8a2ef8e7378b9da71efb
parentf2cba9299be45f8e027f7b45c6e4a3cae55576c6
fetch-pack: Implement no-done capability

If enabled on the connection "multi_ack_detailed no-done" as a
pair allows the remote upload-pack process to send a PACK down
to the client as soon as a "ACK %s ready" message was also sent.

Over git:// and ssh:// where a bi-directional stream is in place
this has very little difference over the classical version that
waits for the client to send a "done\n" line by itself.  It does
slightly reduce the latency involved to start the pack stream as
there is one less round-trip from client->server required.

Over smart HTTP this avoids needing to send a final RPC that has
all of the prior common objects.  Instead the server is able to
return a pack as soon as its ready to.  For many common users the
smart HTTP fetch is now just 2 requests: GET .../info/refs, and
a POST .../git-upload-pack to not only negotiate but also receive
the pack stream.  Only users who have more than 32 local unshared
commits with the remote will need additional requests to negotiate
a common merge base.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fetch-pack.c