pack-bitmap: introduce function to open bitmap for a single source
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>
main
parent
db95bfc121
commit
8cd7ee7b0d
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue