mirror of
https://github.com/git/git.git
synced 2026-06-24 08:48:31 +00:00
Merge branch 'ps/cat-file-filter-batch'
"git cat-file --batch" and friends learned to allow "--filter=" to omit certain objects, just like the transport layer does. * ps/cat-file-filter-batch: builtin/cat-file: use bitmaps to efficiently filter by object type builtin/cat-file: deduplicate logic to iterate over all objects pack-bitmap: introduce function to check whether a pack is bitmapped pack-bitmap: add function to iterate over filtered bitmapped objects pack-bitmap: allow passing payloads to `show_reachable_fn()` builtin/cat-file: support "object:type=" objects filter builtin/cat-file: support "blob:limit=" objects filter builtin/cat-file: support "blob:none" objects filter builtin/cat-file: wire up an option to filter objects builtin/cat-file: introduce function to report object status builtin/cat-file: rename variable that tracks usage
This commit is contained in:
@@ -50,7 +50,8 @@ typedef int (*show_reachable_fn)(
|
||||
int flags,
|
||||
uint32_t hash,
|
||||
struct packed_git *found_pack,
|
||||
off_t found_offset);
|
||||
off_t found_offset,
|
||||
void *payload);
|
||||
|
||||
struct bitmap_index;
|
||||
|
||||
@@ -66,6 +67,13 @@ struct bitmapped_pack {
|
||||
|
||||
struct bitmap_index *prepare_bitmap_git(struct repository *r);
|
||||
struct bitmap_index *prepare_midx_bitmap_git(struct multi_pack_index *midx);
|
||||
|
||||
/*
|
||||
* Given a bitmap index, determine whether it contains the pack either directly
|
||||
* or via the multi-pack-index.
|
||||
*/
|
||||
int bitmap_index_contains_pack(struct bitmap_index *bitmap, struct packed_git *pack);
|
||||
|
||||
void count_bitmap_commit_list(struct bitmap_index *, uint32_t *commits,
|
||||
uint32_t *trees, uint32_t *blobs, uint32_t *tags);
|
||||
void traverse_bitmap_commit_list(struct bitmap_index *,
|
||||
@@ -78,6 +86,18 @@ int test_bitmap_pseudo_merges(struct repository *r);
|
||||
int test_bitmap_pseudo_merge_commits(struct repository *r, uint32_t n);
|
||||
int test_bitmap_pseudo_merge_objects(struct repository *r, uint32_t n);
|
||||
|
||||
struct list_objects_filter_options;
|
||||
|
||||
/*
|
||||
* Filter bitmapped objects and iterate through all resulting objects,
|
||||
* executing `show_reach` for each of them. Returns `-1` in case the filter is
|
||||
* not supported, `0` otherwise.
|
||||
*/
|
||||
int for_each_bitmapped_object(struct bitmap_index *bitmap_git,
|
||||
struct list_objects_filter_options *filter,
|
||||
show_reachable_fn show_reach,
|
||||
void *payload);
|
||||
|
||||
#define GIT_TEST_PACK_USE_BITMAP_BOUNDARY_TRAVERSAL \
|
||||
"GIT_TEST_PACK_USE_BITMAP_BOUNDARY_TRAVERSAL"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user