pack-objects: factor out name_hash
authorVicent Marti <tanoku@gmail.com>
Thu, 24 Oct 2013 18:01:29 +0000 (14:01 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 24 Oct 2013 22:44:52 +0000 (15:44 -0700)
As the pack-objects system grows beyond the single
pack-objects.c file, more parts (like the soon-to-exist
bitmap code) will need to compute hashes for matching
deltas. Factor out name_hash to make it available to other
files.

Signed-off-by: Vicent Marti <tanoku@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pack-objects.c
pack-objects.h

index f3f0cf9..faf746b 100644 (file)
@@ -778,26 +778,6 @@ static void write_pack_file(void)
                        written, nr_result);
 }
 
-static uint32_t name_hash(const char *name)
-{
-       uint32_t c, hash = 0;
-
-       if (!name)
-               return 0;
-
-       /*
-        * This effectively just creates a sortable number from the
-        * last sixteen non-whitespace characters. Last characters
-        * count "most", so things that end in ".c" sort together.
-        */
-       while ((c = *name++) != 0) {
-               if (isspace(c))
-                       continue;
-               hash = (hash >> 2) + (c << 24);
-       }
-       return hash;
-}
-
 static void setup_delta_attr_check(struct git_attr_check *check)
 {
        static struct git_attr *attr_delta;
@@ -826,7 +806,7 @@ static int add_object_entry(const unsigned char *sha1, enum object_type type,
        struct object_entry *entry;
        struct packed_git *p, *found_pack = NULL;
        off_t found_offset = 0;
-       uint32_t hash = name_hash(name);
+       uint32_t hash = pack_name_hash(name);
        uint32_t index_pos;
 
        entry = packlist_find(&to_pack, sha1, &index_pos);
@@ -1082,7 +1062,7 @@ static void add_preferred_base_object(const char *name)
 {
        struct pbase_tree *it;
        int cmplen;
-       unsigned hash = name_hash(name);
+       unsigned hash = pack_name_hash(name);
 
        if (!num_preferred_base || check_pbase_path(hash))
                return;
index f528215..90ad0a8 100644 (file)
@@ -44,4 +44,24 @@ struct object_entry *packlist_find(struct packing_data *pdata,
                                   const unsigned char *sha1,
                                   uint32_t *index_pos);
 
+static inline uint32_t pack_name_hash(const char *name)
+{
+       uint32_t c, hash = 0;
+
+       if (!name)
+               return 0;
+
+       /*
+        * This effectively just creates a sortable number from the
+        * last sixteen non-whitespace characters. Last characters
+        * count "most", so things that end in ".c" sort together.
+        */
+       while ((c = *name++) != 0) {
+               if (isspace(c))
+                       continue;
+               hash = (hash >> 2) + (c << 24);
+       }
+       return hash;
+}
+
 #endif