pack-bitmap: allow passing payloads to `show_reachable_fn()`

The `show_reachable_fn` callback is used by a couple of functions to
present reachable objects to the caller. The function does not provide a
way for the caller to pass a payload though, which is functionality that
we'll require in a subsequent commit.

Change the callback type to accept a payload and adapt all callsites
accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main
Patrick Steinhardt 2025-04-02 13:13:42 +02:00 committed by Junio C Hamano
parent 8fa9fe171a
commit 3d45483846
5 changed files with 16 additions and 11 deletions

View File

@ -1736,7 +1736,8 @@ static int add_object_entry(const struct object_id *oid, enum object_type type,
static int add_object_entry_from_bitmap(const struct object_id *oid, static int add_object_entry_from_bitmap(const struct object_id *oid,
enum object_type type, enum object_type type,
int flags UNUSED, uint32_t name_hash, int flags UNUSED, uint32_t name_hash,
struct packed_git *pack, off_t offset) struct packed_git *pack, off_t offset,
void *payload UNUSED)
{ {
display_progress(progress_state, ++nr_seen); display_progress(progress_state, ++nr_seen);



View File

@ -429,7 +429,8 @@ static int show_object_fast(
int exclude UNUSED, int exclude UNUSED,
uint32_t name_hash UNUSED, uint32_t name_hash UNUSED,
struct packed_git *found_pack UNUSED, struct packed_git *found_pack UNUSED,
off_t found_offset UNUSED) off_t found_offset UNUSED,
void *payload UNUSED)
{ {
fprintf(stdout, "%s\n", oid_to_hex(oid)); fprintf(stdout, "%s\n", oid_to_hex(oid));
return 1; return 1;

View File

@ -1625,7 +1625,7 @@ static void show_extended_objects(struct bitmap_index *bitmap_git,
(obj->type == OBJ_TAG && !revs->tag_objects)) (obj->type == OBJ_TAG && !revs->tag_objects))
continue; continue;


show_reach(&obj->oid, obj->type, 0, eindex->hashes[i], NULL, 0); show_reach(&obj->oid, obj->type, 0, eindex->hashes[i], NULL, 0, NULL);
} }
} }


@ -1663,7 +1663,8 @@ static void init_type_iterator(struct ewah_or_iterator *it,
static void show_objects_for_type( static void show_objects_for_type(
struct bitmap_index *bitmap_git, struct bitmap_index *bitmap_git,
enum object_type object_type, enum object_type object_type,
show_reachable_fn show_reach) show_reachable_fn show_reach,
void *payload)
{ {
size_t i = 0; size_t i = 0;
uint32_t offset; uint32_t offset;
@ -1715,7 +1716,7 @@ static void show_objects_for_type(
if (bitmap_git->hashes) if (bitmap_git->hashes)
hash = get_be32(bitmap_git->hashes + index_pos); hash = get_be32(bitmap_git->hashes + index_pos);


show_reach(&oid, object_type, 0, hash, pack, ofs); show_reach(&oid, object_type, 0, hash, pack, ofs, payload);
} }
} }


@ -2518,13 +2519,13 @@ void traverse_bitmap_commit_list(struct bitmap_index *bitmap_git,
{ {
assert(bitmap_git->result); assert(bitmap_git->result);


show_objects_for_type(bitmap_git, OBJ_COMMIT, show_reachable); show_objects_for_type(bitmap_git, OBJ_COMMIT, show_reachable, NULL);
if (revs->tree_objects) if (revs->tree_objects)
show_objects_for_type(bitmap_git, OBJ_TREE, show_reachable); show_objects_for_type(bitmap_git, OBJ_TREE, show_reachable, NULL);
if (revs->blob_objects) if (revs->blob_objects)
show_objects_for_type(bitmap_git, OBJ_BLOB, show_reachable); show_objects_for_type(bitmap_git, OBJ_BLOB, show_reachable, NULL);
if (revs->tag_objects) if (revs->tag_objects)
show_objects_for_type(bitmap_git, OBJ_TAG, show_reachable); show_objects_for_type(bitmap_git, OBJ_TAG, show_reachable, NULL);


show_extended_objects(bitmap_git, revs, show_reachable); show_extended_objects(bitmap_git, revs, show_reachable);
} }

View File

@ -50,7 +50,8 @@ typedef int (*show_reachable_fn)(
int flags, int flags,
uint32_t hash, uint32_t hash,
struct packed_git *found_pack, struct packed_git *found_pack,
off_t found_offset); off_t found_offset,
void *payload);


struct bitmap_index; struct bitmap_index;



View File

@ -341,7 +341,8 @@ static int mark_object_seen(const struct object_id *oid,
int exclude UNUSED, int exclude UNUSED,
uint32_t name_hash UNUSED, uint32_t name_hash UNUSED,
struct packed_git *found_pack UNUSED, struct packed_git *found_pack UNUSED,
off_t found_offset UNUSED) off_t found_offset UNUSED,
void *payload UNUSED)
{ {
struct object *obj = lookup_object_by_type(the_repository, oid, type); struct object *obj = lookup_object_by_type(the_repository, oid, type);
if (!obj) if (!obj)