Use thin pack transfer in "git fetch".

Signed-off-by: Junio C Hamano <junkio@cox.net>
diff --git a/upload-pack.c b/upload-pack.c
index d198055..3cdf428 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -14,6 +14,7 @@
 #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 @@
 		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 @@
 		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 @@
 			    "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,7 +218,7 @@
 
 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 (capabilities)