]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-bitmap: introduce function to open bitmap for a single source
authorPatrick Steinhardt <ps@pks.im>
Wed, 15 Jul 2026 06:22:37 +0000 (08:22 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 15 Jul 2026 14:19:16 +0000 (07:19 -0700)
The function `prepare_bitmap_git()` opens the first bitmap it can find
in any of the object sources connected to the repository. In a
subsequent commit, the "packed" object database backend will learn to
use bitmaps to answer object filters when enumerating objects. That
backend operates on a single object source though, so using a bitmap
that potentially belongs to a different source would be wrong:

  - The source would yield objects that are not part of the source
    itself.

  - The object source info would be attributed to the wrong source.

  - With multiple sources, each source would enumerate the same bitmap
    another time.

Introduce a new function `prepare_bitmap_git_for_source()` that only
opens bitmaps belonging to the given object source.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
pack-bitmap.c
pack-bitmap.h

index 72c8ae3228036a0620cc9f63adfe9153c35448bb..09ba15d26be88a8da76ddff1c37bf4c016647ba6 100644 (file)
@@ -753,6 +753,18 @@ struct bitmap_index *prepare_midx_bitmap_git(struct multi_pack_index *midx)
        return NULL;
 }
 
+struct bitmap_index *prepare_bitmap_git_for_source(struct odb_source_packed *source)
+{
+       struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git));
+
+       if (!open_bitmap_for_source(source, bitmap_git) &&
+           !load_bitmap(source->base.odb->repo, bitmap_git, 0))
+               return bitmap_git;
+
+       free_bitmap_index(bitmap_git);
+       return NULL;
+}
+
 int bitmap_index_contains_pack(struct bitmap_index *bitmap, struct packed_git *pack)
 {
        for (; bitmap; bitmap = bitmap->base) {
index ae8dc491acbbbfd7dc0706bbf5fb0bc13aa5aa41..9f20fb6e563091825811bbd825bb78b14e310c61 100644 (file)
@@ -9,6 +9,7 @@
 #include "string-list.h"
 
 struct commit;
+struct odb_source_packed;
 struct repository;
 struct rev_info;
 
@@ -68,6 +69,7 @@ struct bitmapped_pack {
 
 struct bitmap_index *prepare_bitmap_git(struct repository *r);
 struct bitmap_index *prepare_midx_bitmap_git(struct multi_pack_index *midx);
+struct bitmap_index *prepare_bitmap_git_for_source(struct odb_source_packed *source);
 
 /*
  * Given a bitmap index, determine whether it contains the pack either directly