]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'jk/cat-file-avoid-bitmap-when-unneeded'
authorJunio C Hamano <gitster@pobox.com>
Fri, 16 Jan 2026 20:40:26 +0000 (12:40 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 16 Jan 2026 20:40:27 +0000 (12:40 -0800)
Fix for a performance regression in "git cat-file".

* jk/cat-file-avoid-bitmap-when-unneeded:
  cat-file: only use bitmaps when filtering

1  2 
builtin/cat-file.c

index 505ddaa12f530934ca1b910cd271dff2ab9227ee,6d704ec6c9839862452e3d82d94afc97c62aef4b..3cb725940d9e4298a7d4d7ece32837008601e43a
@@@ -846,15 -839,17 +846,17 @@@ static void batch_each_object(struct ba
                .callback = callback,
                .payload = _payload,
        };
-       struct bitmap_index *bitmap = prepare_bitmap_git(the_repository);
+       struct bitmap_index *bitmap = NULL;
  
 -      for_each_loose_object(batch_one_object_loose, &payload, 0);
 +      for_each_loose_object(the_repository->objects, batch_one_object_loose, &payload, 0);
  
-       if (bitmap && !for_each_bitmapped_object(bitmap, &opt->objects_filter,
-                                                batch_one_object_bitmapped, &payload)) {
+       if (opt->objects_filter.choice != LOFC_DISABLED &&
+           (bitmap = prepare_bitmap_git(the_repository)) &&
+           !for_each_bitmapped_object(bitmap, &opt->objects_filter,
+                                      batch_one_object_bitmapped, &payload)) {
                struct packed_git *pack;
  
 -              for (pack = get_all_packs(the_repository); pack; pack = pack->next) {
 +              repo_for_each_pack(the_repository, pack) {
                        if (bitmap_index_contains_pack(bitmap, pack) ||
                            open_pack_index(pack))
                                continue;