aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-03-20 21:52:44 -0700
committerJunio C Hamano <gitster@pobox.com>2011-03-20 21:53:25 -0700
commit6afca450c3f2f05385900a7b8d3a0d47286f983f (patch)
treea090f14d020f7835668d94801f20f12315c8986e
parentc12f5917e4f528b056a8b9ca625397aee97ae1e4 (diff)
downloadgit-6afca450c3f2f05385900a7b8d3a0d47286f983f.tar.gz
git-6afca450c3f2f05385900a7b8d3a0d47286f983f.tar.xz
fetch-pack: progressively use larger handshake windows
The client has to dig the history deeper when more recent parts of its history do not have any overlap with the server it is fetching from. Make the handshake window exponentially larger as we dig deeper, with a reasonable upper cap. Signed-off-by: Junio C Hamano <gitster@pobox.com> Acked-by: Shawn Pearce <spearce@spearce.org>
-rw-r--r--builtin/fetch-pack.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index 1abe624dc..b4f34a2cf 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -219,10 +219,15 @@ static void send_request(int fd, struct strbuf *buf)
}
#define INITIAL_FLUSH 32
+#define LARGE_FLUSH 1024
static int next_flush(int count)
{
- return INITIAL_FLUSH + count;
+ if (count < LARGE_FLUSH)
+ count <<= 1;
+ else
+ count += LARGE_FLUSH;
+ return count;
}
static int find_common(int fd[2], unsigned char *result_sha1,