shortlog: group by committer information
[gitweb.git] / pack-objects.h
index f5282155f2e6136e6270be2b0451f9a8e57a1464..cc9b9a9b90ca62e7a6e638928511a465fbb9974b 100644 (file)
@@ -17,6 +17,7 @@ struct object_entry {
        enum object_type type;
        enum object_type in_pack_type;  /* could be delta */
        uint32_t hash;                  /* name hint hash */
+       unsigned int in_pack_pos;
        unsigned char in_pack_header_size;
        unsigned preferred_base:1; /*
                                    * we do not pack this, but is available
@@ -26,6 +27,15 @@ struct object_entry {
        unsigned no_try_delta:1;
        unsigned tagged:1; /* near the very tip of refs */
        unsigned filled:1; /* assigned write-order */
+
+       /*
+        * State flags for depth-first search used for analyzing delta cycles.
+        */
+       enum {
+               DFS_NONE = 0,
+               DFS_ACTIVE,
+               DFS_DONE
+       } dfs_state;
 };
 
 struct packing_data {
@@ -44,4 +54,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