pack-bitmap: factor out 'bitmap_for_commit()'
A couple of callers within pack-bitmap.c duplicate logic to lookup a given object id in the bitamps khash. Factor this out into a new function, 'bitmap_for_commit()' to reduce some code duplication. Make this new function non-static, since it will be used in later commits from outside of pack-bitmap.c. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
449fa5ee06
commit
98c31f366a
|
@ -380,6 +380,16 @@ struct include_data {
|
||||||
struct bitmap *seen;
|
struct bitmap *seen;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ewah_bitmap *bitmap_for_commit(struct bitmap_index *bitmap_git,
|
||||||
|
struct commit *commit)
|
||||||
|
{
|
||||||
|
khiter_t hash_pos = kh_get_oid_map(bitmap_git->bitmaps,
|
||||||
|
commit->object.oid);
|
||||||
|
if (hash_pos >= kh_end(bitmap_git->bitmaps))
|
||||||
|
return NULL;
|
||||||
|
return lookup_stored_bitmap(kh_value(bitmap_git->bitmaps, hash_pos));
|
||||||
|
}
|
||||||
|
|
||||||
static inline int bitmap_position_extended(struct bitmap_index *bitmap_git,
|
static inline int bitmap_position_extended(struct bitmap_index *bitmap_git,
|
||||||
const struct object_id *oid)
|
const struct object_id *oid)
|
||||||
{
|
{
|
||||||
|
@ -465,10 +475,10 @@ static void show_commit(struct commit *commit, void *data)
|
||||||
|
|
||||||
static int add_to_include_set(struct bitmap_index *bitmap_git,
|
static int add_to_include_set(struct bitmap_index *bitmap_git,
|
||||||
struct include_data *data,
|
struct include_data *data,
|
||||||
const struct object_id *oid,
|
struct commit *commit,
|
||||||
int bitmap_pos)
|
int bitmap_pos)
|
||||||
{
|
{
|
||||||
khiter_t hash_pos;
|
struct ewah_bitmap *partial;
|
||||||
|
|
||||||
if (data->seen && bitmap_get(data->seen, bitmap_pos))
|
if (data->seen && bitmap_get(data->seen, bitmap_pos))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -476,10 +486,9 @@ static int add_to_include_set(struct bitmap_index *bitmap_git,
|
||||||
if (bitmap_get(data->base, bitmap_pos))
|
if (bitmap_get(data->base, bitmap_pos))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
hash_pos = kh_get_oid_map(bitmap_git->bitmaps, *oid);
|
partial = bitmap_for_commit(bitmap_git, commit);
|
||||||
if (hash_pos < kh_end(bitmap_git->bitmaps)) {
|
if (partial) {
|
||||||
struct stored_bitmap *st = kh_value(bitmap_git->bitmaps, hash_pos);
|
bitmap_or_ewah(data->base, partial);
|
||||||
bitmap_or_ewah(data->base, lookup_stored_bitmap(st));
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -498,8 +507,7 @@ static int should_include(struct commit *commit, void *_data)
|
||||||
(struct object *)commit,
|
(struct object *)commit,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (!add_to_include_set(data->bitmap_git, data, &commit->object.oid,
|
if (!add_to_include_set(data->bitmap_git, data, commit, bitmap_pos)) {
|
||||||
bitmap_pos)) {
|
|
||||||
struct commit_list *parent = commit->parents;
|
struct commit_list *parent = commit->parents;
|
||||||
|
|
||||||
while (parent) {
|
while (parent) {
|
||||||
|
@ -1282,10 +1290,10 @@ void test_bitmap_walk(struct rev_info *revs)
|
||||||
{
|
{
|
||||||
struct object *root;
|
struct object *root;
|
||||||
struct bitmap *result = NULL;
|
struct bitmap *result = NULL;
|
||||||
khiter_t pos;
|
|
||||||
size_t result_popcnt;
|
size_t result_popcnt;
|
||||||
struct bitmap_test_data tdata;
|
struct bitmap_test_data tdata;
|
||||||
struct bitmap_index *bitmap_git;
|
struct bitmap_index *bitmap_git;
|
||||||
|
struct ewah_bitmap *bm;
|
||||||
|
|
||||||
if (!(bitmap_git = prepare_bitmap_git(revs->repo)))
|
if (!(bitmap_git = prepare_bitmap_git(revs->repo)))
|
||||||
die("failed to load bitmap indexes");
|
die("failed to load bitmap indexes");
|
||||||
|
@ -1297,12 +1305,9 @@ void test_bitmap_walk(struct rev_info *revs)
|
||||||
bitmap_git->version, bitmap_git->entry_count);
|
bitmap_git->version, bitmap_git->entry_count);
|
||||||
|
|
||||||
root = revs->pending.objects[0].item;
|
root = revs->pending.objects[0].item;
|
||||||
pos = kh_get_oid_map(bitmap_git->bitmaps, root->oid);
|
bm = bitmap_for_commit(bitmap_git, (struct commit *)root);
|
||||||
|
|
||||||
if (pos < kh_end(bitmap_git->bitmaps)) {
|
|
||||||
struct stored_bitmap *st = kh_value(bitmap_git->bitmaps, pos);
|
|
||||||
struct ewah_bitmap *bm = lookup_stored_bitmap(st);
|
|
||||||
|
|
||||||
|
if (bm) {
|
||||||
fprintf(stderr, "Found bitmap for %s. %d bits / %08x checksum\n",
|
fprintf(stderr, "Found bitmap for %s. %d bits / %08x checksum\n",
|
||||||
oid_to_hex(&root->oid), (int)bm->bit_size, ewah_checksum(bm));
|
oid_to_hex(&root->oid), (int)bm->bit_size, ewah_checksum(bm));
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,8 @@ uint32_t *create_bitmap_mapping(struct bitmap_index *bitmap_git,
|
||||||
int rebuild_bitmap(const uint32_t *reposition,
|
int rebuild_bitmap(const uint32_t *reposition,
|
||||||
struct ewah_bitmap *source,
|
struct ewah_bitmap *source,
|
||||||
struct bitmap *dest);
|
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,
|
void bitmap_writer_select_commits(struct commit **indexed_commits,
|
||||||
unsigned int indexed_commits_nr, int max_bitmaps);
|
unsigned int indexed_commits_nr, int max_bitmaps);
|
||||||
void bitmap_writer_build(struct packing_data *to_pack);
|
void bitmap_writer_build(struct packing_data *to_pack);
|
||||||
|
|
Loading…
Reference in New Issue