6 #include "pack-objects.h"
9 * This is the equivalent of:
11 * uint32_t object_pos;
15 * but due to the funny sizing, we cannot rely on the compiler to give us the
16 * exact struct packing we want. So let's treat it as an array and just provide
17 * a few helpers for accessing the components.
19 #define BITMAP_DISK_ENTRY_LEN 6
21 static inline void bitmap_disk_entry_create(unsigned char *on_disk
,
26 put_be32(on_disk
, object_pos
);
27 on_disk
[4] = xor_offset
;
31 static inline uint32_t bitmap_disk_entry_object_pos(unsigned char *on_disk
)
33 return get_be32(on_disk
);
36 static inline uint8_t bitmap_disk_entry_xor_offset(unsigned char *on_disk
)
41 static inline uint8_t bitmap_disk_entry_flags(unsigned char *on_disk
)
46 struct bitmap_disk_header
{
51 unsigned char checksum
[20];
54 static const char BITMAP_IDX_SIGNATURE
[] = {'B', 'I', 'T', 'M'};
56 #define NEEDS_BITMAP (1u<<22)
58 enum pack_bitmap_opts
{
59 BITMAP_OPT_FULL_DAG
= 1,
60 BITMAP_OPT_HASH_CACHE
= 4,
63 enum pack_bitmap_flags
{
64 BITMAP_FLAG_REUSE
= 0x1
67 typedef int (*show_reachable_fn
)(
68 const unsigned char *sha1
,
69 enum object_type type
,
72 struct packed_git
*found_pack
,
75 int prepare_bitmap_git(void);
76 void count_bitmap_commit_list(uint32_t *commits
, uint32_t *trees
, uint32_t *blobs
, uint32_t *tags
);
77 void traverse_bitmap_commit_list(show_reachable_fn show_reachable
);
78 void test_bitmap_walk(struct rev_info
*revs
);
79 char *pack_bitmap_filename(struct packed_git
*p
);
80 int prepare_bitmap_walk(struct rev_info
*revs
);
81 int reuse_partial_packfile_from_bitmap(struct packed_git
**packfile
, uint32_t *entries
, off_t
*up_to
);
82 int rebuild_existing_bitmaps(struct packing_data
*mapping
, khash_sha1
*reused_bitmaps
, int show_progress
);
84 void bitmap_writer_show_progress(int show
);
85 void bitmap_writer_set_checksum(unsigned char *sha1
);
86 void bitmap_writer_build_type_index(struct pack_idx_entry
**index
, uint32_t index_nr
);
87 void bitmap_writer_reuse_bitmaps(struct packing_data
*to_pack
);
88 void bitmap_writer_select_commits(struct commit
**indexed_commits
,
89 unsigned int indexed_commits_nr
, int max_bitmaps
);
90 void bitmap_writer_build(struct packing_data
*to_pack
);
91 void bitmap_writer_finish(struct pack_idx_entry
**index
,