]> Pileus Git - ~andy/git/commitdiff
fast-import: insert new object entries at start of hash bucket
authorDavid Barr <david.barr@cordelta.com>
Tue, 23 Nov 2010 07:53:48 +0000 (01:53 -0600)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Nov 2010 19:25:16 +0000 (11:25 -0800)
More often than not, find_object is called for recently inserted objects.
Optimise for this case by inserting new entries at the start of the chain.
This doesn't affect the cost of new inserts but reduces the cost of find
and insert for existing object entries.

Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fast-import.c

index 74f08bd554ae4cab1dc9ee38272376e5cbec1200..89d074bbe432440f84156a82164179ff53336058 100644 (file)
@@ -539,22 +539,17 @@ static struct object_entry *insert_object(unsigned char *sha1)
 {
        unsigned int h = sha1[0] << 8 | sha1[1];
        struct object_entry *e = object_table[h];
-       struct object_entry *p = NULL;
 
        while (e) {
                if (!hashcmp(sha1, e->idx.sha1))
                        return e;
-               p = e;
                e = e->next;
        }
 
        e = new_object(sha1);
-       e->next = NULL;
+       e->next = object_table[h];
        e->idx.offset = 0;
-       if (p)
-               p->next = e;
-       else
-               object_table[h] = e;
+       object_table[h] = e;
        return e;
 }