]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-bitmap: factor out 'add_commit_to_bitmap()'
authorTaylor Blau <me@ttaylorr.com>
Tue, 8 Dec 2020 22:05:14 +0000 (17:05 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 8 Dec 2020 22:49:06 +0000 (14:49 -0800)
'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>
pack-bitmap.c

index 5efb8af12106607fca6f0544e227764b78a4d9ee..d88745fb026adeb41a9d828c57314af0a6a14283 100644 (file)
@@ -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,
                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);