From: Junio C Hamano Date: Mon, 20 Feb 2006 08:45:38 +0000 (-0800) Subject: Merge branch 'jc/pack-thin' into next X-Git-Tag: v1.3.0-rc1~54^2~52 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/5be4eabf90a4f6d14d3ae16772e6b2e063d71587?hp=-c Merge branch 'jc/pack-thin' into next * jc/pack-thin: Use thin pack transfer in "git fetch". Add git-push --thin. --- 5be4eabf90a4f6d14d3ae16772e6b2e063d71587 diff --combined upload-pack.c index 3606529f61,3cdf4288b8..635abb371d --- a/upload-pack.c +++ b/upload-pack.c @@@ -14,6 -14,7 +14,7 @@@ static const char upload_pack_usage[] #define MAX_HAS 256 #define MAX_NEEDS 256 static int nr_has = 0, nr_needs = 0, multi_ack = 0, nr_our_refs = 0; + static int use_thin_pack = 0; static unsigned char has_sha1[MAX_HAS][20]; static unsigned char needs_sha1[MAX_NEEDS][20]; static unsigned int timeout = 0; @@@ -49,8 -50,10 +50,10 @@@ static void create_pack_file(void char *buf; char **p; - if (create_full_pack) + if (create_full_pack) { args = 10; + use_thin_pack = 0; /* no point doing it */ + } else args = nr_has + nr_needs + 5; argv = xmalloc(args * sizeof(char *)); @@@ -62,7 -65,7 +65,7 @@@ close(fd[0]); close(fd[1]); *p++ = "rev-list"; - *p++ = "--objects"; + *p++ = use_thin_pack ? "--objects-edge" : "--objects"; if (create_full_pack || MAX_NEEDS <= nr_needs) *p++ = "--all"; else { @@@ -192,6 -195,8 +195,8 @@@ static int receive_needs(void "expected to get sha, not '%s'", line); if (strstr(line+45, "multi_ack")) multi_ack = 1; + if (strstr(line+45, "thin-pack")) + use_thin_pack = 1; /* We have sent all our refs already, and the other end * should have chosen out of them; otherwise they are @@@ -213,12 -218,9 +218,12 @@@ static int send_ref(const char *refname, const unsigned char *sha1) { - static char *capabilities = "multi_ack"; + static char *capabilities = "multi_ack thin-pack"; struct object *o = parse_object(sha1); + if (!o) + die("git-upload-pack: cannot find object %s:", sha1_to_hex(sha1)); + if (capabilities) packet_write(1, "%s %s%c%s\n", sha1_to_hex(sha1), refname, 0, capabilities);