diff options
Diffstat (limited to 'pack-bitmap.c')
-rw-r--r-- | pack-bitmap.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/pack-bitmap.c b/pack-bitmap.c index 82090a6741..ae0b57b950 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -66,6 +66,9 @@ static struct bitmap_index { /* Number of bitmapped commits */ uint32_t entry_count; + /* Name-hash cache (or NULL if not present). */ + uint32_t *hashes; + /* * Extended index. * @@ -152,6 +155,11 @@ static int load_bitmap_header(struct bitmap_index *index) if ((flags & BITMAP_OPT_FULL_DAG) == 0) return error("Unsupported options for bitmap index file " "(Git requires BITMAP_OPT_FULL_DAG)"); + + if (flags & BITMAP_OPT_HASH_CACHE) { + unsigned char *end = index->map + index->map_size - 20; + index->hashes = ((uint32_t *)end) - index->pack->num_objects; + } } index->entry_count = ntohl(header->entry_count); @@ -626,6 +634,9 @@ static void show_objects_for_type( entry = &bitmap_git.reverse_index->revindex[pos + offset]; sha1 = nth_packed_object_sha1(bitmap_git.pack, entry->nr); + if (bitmap_git.hashes) + hash = ntohl(bitmap_git.hashes[entry->nr]); + show_reach(sha1, object_type, 0, hash, bitmap_git.pack, entry->offset); } |