]> git.ipfire.org Git - thirdparty/git.git/blobdiff - pack-bitmap.h
bitmap_position_packfile(): convert to new revindex API
[thirdparty/git.git] / pack-bitmap.h
index 5ded2f139a6ccdab725ed5e568b1100906f4b736..25dfcf56156bf8b9b03ebbbaae895a71fc8cf89b 100644 (file)
@@ -3,18 +3,24 @@
 
 #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[4];
+       char magic[ARRAY_SIZE(BITMAP_IDX_SIGNATURE)];
        uint16_t version;
        uint16_t options;
        uint32_t entry_count;
-       unsigned char checksum[20];
+       unsigned char checksum[GIT_MAX_RAWSZ];
 };
 
-static const char BITMAP_IDX_SIGNATURE[] = {'B', 'I', 'T', 'M'};
-
 #define NEEDS_BITMAP (1u<<22)
 
 enum pack_bitmap_opts {
@@ -34,20 +40,46 @@ typedef int (*show_reachable_fn)(
        struct packed_git *found_pack,
        off_t found_offset);
 
-int prepare_bitmap_git(void);
-void count_bitmap_commit_list(uint32_t *commits, uint32_t *trees, uint32_t *blobs, uint32_t *tags);
-void traverse_bitmap_commit_list(show_reachable_fn show_reachable);
+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);
-int prepare_bitmap_walk(struct rev_info *revs);
-int reuse_partial_packfile_from_bitmap(struct packed_git **packfile, uint32_t *entries, off_t *up_to);
-int rebuild_existing_bitmaps(struct packing_data *mapping, khash_sha1 *reused_bitmaps, int show_progress);
+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);
+uint32_t *create_bitmap_mapping(struct bitmap_index *bitmap_git,
+                               struct packing_data *mapping);
+int rebuild_bitmap(const uint32_t *reposition,
+                  struct ewah_bitmap *source,
+                  struct bitmap *dest);
+struct ewah_bitmap *bitmap_for_commit(struct bitmap_index *bitmap_git,
+                                     struct commit *commit);
 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);