git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/3] fetch-pack: factor out hardcoded handshake window size

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 18, 2011, 22:26 UTC
Message-ID
<7v7hbwt68d.fsf@alter.siamese.dyndns.org>

The "git fetch" client presents the most recent 32 commits it has to the server and gives a chance to the server to say "ok, we heard enough", and continues reporting what it has in chunks of 32 commits, digging its history down to older commits.

Move the hardcoded size of the handshake window outside the code, so that we can tweak it more easily.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 * I don't want to be stepping on your toes, but the first step was very
   trivial.  Goes on top of the sp/maint-fetch-pack-stop-early topic.
 builtin/fetch-pack.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index 59fbda5..20e30f5 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -218,11 +218,18 @@ static void send_request(int fd, struct strbuf *buf)
 		safe_write(fd, buf->buf, buf->len);
 }
 
+#define INITIAL_FLUSH 32
+
+static int next_flush(int count)
+{
+	return INITIAL_FLUSH + count;
+}
+
 static int find_common(int fd[2], unsigned char *result_sha1,
 		       struct ref *refs)
 {
 	int fetching;
-	int count = 0, flushes = 0, retval;
+	int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
 	const unsigned char *sha1;
 	unsigned in_vain = 0;
 	int got_continue = 0;
@@ -335,19 +342,20 @@ static int find_common(int fd[2], unsigned char *result_sha1,
 		if (args.verbose)
 			fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
 		in_vain++;
-		if (!(31 & ++count)) {
+		if (flush_at <= ++count) {
 			int ack;
 
 			packet_buf_flush(&req_buf);
 			send_request(fd[1], &req_buf);
 			strbuf_setlen(&req_buf, state_len);
 			flushes++;
+			flush_at = next_flush(count);
 
 			/*
 			 * We keep one window "ahead" of the other side, and
 			 * will wait for an ACK only on the next one
 			 */
-			if (!args.stateless_rpc && count == 32)
+			if (!args.stateless_rpc && count == INITIAL_FLUSH)
 				continue;
 
 			consume_shallow_list(fd[0]);
-- 
1.7.4.1.496.ga3201
Message 1 of 1 in “fetch-pack: factor out hardcoded handshake window size”
  1. 1/3 fetch-pack: factor out hardcoded handshake window sizeJunio C Hamano, Mar 18, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.