diff options
Diffstat (limited to 'third_party/git/pack-bitmap.h')
-rw-r--r-- | third_party/git/pack-bitmap.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/third_party/git/pack-bitmap.h b/third_party/git/pack-bitmap.h new file mode 100644 index 000000000000..1203120c4321 --- /dev/null +++ b/third_party/git/pack-bitmap.h @@ -0,0 +1,85 @@ +#ifndef PACK_BITMAP_H +#define PACK_BITMAP_H + +#include "ewah/ewok.h" +#include "khash.h" +#include "pack.h" +#include "pack-objects.h" + +struct commit; +struct repository; +struct rev_info; +struct list_objects_filter_options; + +static const char BITMAP_IDX_SIGNATURE[] = {'B', 'I', 'T', 'M'}; + +struct bitmap_disk_header { + char magic[ARRAY_SIZE(BITMAP_IDX_SIGNATURE)]; + uint16_t version; + uint16_t options; + uint32_t entry_count; + unsigned char checksum[GIT_MAX_RAWSZ]; +}; + +#define NEEDS_BITMAP (1u<<22) + +enum pack_bitmap_opts { + BITMAP_OPT_FULL_DAG = 1, + BITMAP_OPT_HASH_CACHE = 4, +}; + +enum pack_bitmap_flags { + BITMAP_FLAG_REUSE = 0x1 +}; + +typedef int (*show_reachable_fn)( + const struct object_id *oid, + enum object_type type, + int flags, + uint32_t hash, + struct packed_git *found_pack, + off_t found_offset); + +struct bitmap_index; + +struct bitmap_index *prepare_bitmap_git(struct repository *r); +void count_bitmap_commit_list(struct bitmap_index *, uint32_t *commits, + uint32_t *trees, uint32_t *blobs, uint32_t *tags); +void traverse_bitmap_commit_list(struct bitmap_index *, + struct rev_info *revs, + show_reachable_fn show_reachable); +void test_bitmap_walk(struct rev_info *revs); +struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs, + struct list_objects_filter_options *filter); +int reuse_partial_packfile_from_bitmap(struct bitmap_index *, + struct packed_git **packfile, + uint32_t *entries, + struct bitmap **reuse_out); +int rebuild_existing_bitmaps(struct bitmap_index *, struct packing_data *mapping, + kh_oid_map_t *reused_bitmaps, int show_progress); +void free_bitmap_index(struct bitmap_index *); +int bitmap_walk_contains(struct bitmap_index *, + struct bitmap *bitmap, const struct object_id *oid); + +/* + * After a traversal has been performed by prepare_bitmap_walk(), this can be + * queried to see if a particular object was reachable from any of the + * objects flagged as UNINTERESTING. + */ +int bitmap_has_oid_in_uninteresting(struct bitmap_index *, const struct object_id *oid); + +void bitmap_writer_show_progress(int show); +void bitmap_writer_set_checksum(unsigned char *sha1); +void bitmap_writer_build_type_index(struct packing_data *to_pack, + struct pack_idx_entry **index, + uint32_t index_nr); +void bitmap_writer_reuse_bitmaps(struct packing_data *to_pack); +void bitmap_writer_select_commits(struct commit **indexed_commits, + unsigned int indexed_commits_nr, int max_bitmaps); +void bitmap_writer_build(struct packing_data *to_pack); +void bitmap_writer_finish(struct pack_idx_entry **index, + uint32_t index_nr, + const char *filename, + uint16_t options); + +#endif |