git-pack-objects: use name information (if any) to sort objects for packing.

This is incredibly cheezy. But it's cheap, and it works pretty well.
diff --git a/pack-objects.c b/pack-objects.c
index 286e450..bc8bb95 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -1,3 +1,4 @@
+#include <ctype.h>
 #include "cache.h"
 #include "object.h"
 #include "delta.h"
@@ -17,7 +18,7 @@
 	unsigned long size;
 	unsigned long offset;
 	unsigned int depth;
-	unsigned int flags;
+	unsigned int hash;
 	enum object_type type;
 	unsigned long delta_size;
 	struct object_entry *delta;
@@ -182,7 +183,7 @@
 	fclose(f);
 }
 
-static void add_object_entry(unsigned char *sha1)
+static void add_object_entry(unsigned char *sha1, unsigned int hash)
 {
 	unsigned int idx = nr_objects;
 	struct object_entry *entry;
@@ -195,6 +196,7 @@
 	entry = objects + idx;
 	memset(entry, 0, sizeof(*entry));
 	memcpy(entry->sha1, sha1, 20);
+	entry->hash = hash;
 	nr_objects = idx+1;
 }
 
@@ -267,6 +269,10 @@
 		return -1;
 	if (a->type > b->type)
 		return 1;
+	if (a->hash < b->hash)
+		return -1;
+	if (a->hash > b->hash)
+		return 1;
 	if (a->size < b->size)
 		return -1;
 	if (a->size > b->size)
@@ -319,6 +325,8 @@
 	max_size = size / 2 - 20;
 	if (cur_entry->delta)
 		max_size = cur_entry->delta_size-1;
+	if (sizediff >= max_size)
+		return -1;
 	delta_buf = diff_delta(old->data, oldsize,
 			       cur->data, size, &delta_size, max_size);
 	if (!delta_buf)
@@ -371,7 +379,7 @@
 
 int main(int argc, char **argv)
 {
-	char line[128];
+	char line[PATH_MAX + 20];
 	int window = 10, depth = 10;
 	int i;
 
@@ -404,10 +412,21 @@
 		usage(pack_usage);
 
 	while (fgets(line, sizeof(line), stdin) != NULL) {
+		unsigned int hash;
+		char *p;
 		unsigned char sha1[20];
+
 		if (get_sha1_hex(line, sha1))
 			die("expected sha1, got garbage");
-		add_object_entry(sha1);
+		hash = 0;
+		p = line+40;
+		while (*p) {
+			unsigned char c = *p++;
+			if (isspace(c))
+				continue;
+			hash = hash * 11 + c;
+		}
+		add_object_entry(sha1, hash);
 	}
 	get_object_details();