]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'jk/cat-file-avoid-bitmap-when-unneeded' into jch
authorJunio C Hamano <gitster@pobox.com>
Thu, 8 Jan 2026 07:40:37 +0000 (16:40 +0900)
committerJunio C Hamano <gitster@pobox.com>
Thu, 8 Jan 2026 07:40:38 +0000 (16:40 +0900)
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 2ad712e9f8f55ce4d2bc4b1f2d8b8cd1066c56de,6d704ec6c9839862452e3d82d94afc97c62aef4b..df8e87a81f5eee47fa94f4211cc3ad1eee40c5e4
@@@ -845,15 -839,17 +845,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;