Browse Source

pack-bitmap: factor out 'add_commit_to_bitmap()'

'find_objects()' currently needs to interact with the bitmaps khash
pretty closely. To make 'find_objects()' read a little more
straightforwardly, remove some of the khash-level details into a new
function that describes what it does: 'add_commit_to_bitmap()'.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Taylor Blau 4 years ago committed by Junio C Hamano
parent
commit
83578051a9
  1. 36
      pack-bitmap.c

36
pack-bitmap.c

@ -521,6 +521,23 @@ static int should_include(struct commit *commit, void *_data) @@ -521,6 +521,23 @@ static int should_include(struct commit *commit, void *_data)
return 1;
}

static int add_commit_to_bitmap(struct bitmap_index *bitmap_git,
struct bitmap **base,
struct commit *commit)
{
struct ewah_bitmap *or_with = bitmap_for_commit(bitmap_git, commit);

if (!or_with)
return 0;

if (*base == NULL)
*base = ewah_to_bitmap(or_with);
else
bitmap_or_ewah(*base, or_with);

return 1;
}

static struct bitmap *find_objects(struct bitmap_index *bitmap_git,
struct rev_info *revs,
struct object_list *roots,
@ -544,21 +561,10 @@ static struct bitmap *find_objects(struct bitmap_index *bitmap_git, @@ -544,21 +561,10 @@ static struct bitmap *find_objects(struct bitmap_index *bitmap_git,
struct object *object = roots->item;
roots = roots->next;

if (object->type == OBJ_COMMIT) {
khiter_t pos = kh_get_oid_map(bitmap_git->bitmaps, object->oid);

if (pos < kh_end(bitmap_git->bitmaps)) {
struct stored_bitmap *st = kh_value(bitmap_git->bitmaps, pos);
struct ewah_bitmap *or_with = lookup_stored_bitmap(st);

if (base == NULL)
base = ewah_to_bitmap(or_with);
else
bitmap_or_ewah(base, or_with);

object->flags |= SEEN;
continue;
}
if (object->type == OBJ_COMMIT &&
add_commit_to_bitmap(bitmap_git, &base, (struct commit *)object)) {
object->flags |= SEEN;
continue;
}

object_list_insert(object, &not_mapped);

Loading…
Cancel
Save