From: Patrick Steinhardt Date: Wed, 24 Jun 2026 12:19:14 +0000 (+0200) Subject: packfile: thread odb_source_packed through packed_object_info() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1b9f137b439a441a91791653746412354da4e844;p=thirdparty%2Fgit.git packfile: thread odb_source_packed through packed_object_info() Add an optional `struct odb_source_packed *source` parameter to `packed_object_info()` and `packed_object_info_with_index_pos()`. This parameter is unused at this point in time, but it will be used in a follow-up commit so that we can record the source of a specific object. Note that callers in "odb/source-packed.c" pass the already-available source, but all other callers pass `NULL` instead. This is fine though, as we only care about populating this info when called via the packed store. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- diff --git a/builtin/cat-file.c b/builtin/cat-file.c index 0f3dbd9850..8726485f1f 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -497,7 +497,7 @@ static void batch_object_write(const char *obj_name, data->info.sizep = &data->size; if (pack) - ret = packed_object_info(pack, offset, &data->info); + ret = packed_object_info(NULL, pack, offset, &data->info); else ret = odb_read_object_info_extended(the_repository->objects, &data->oid, &data->info, diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index bc5f9ef321..620d9ce085 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -2463,7 +2463,7 @@ static void drop_reused_delta(struct object_entry *entry) oi.sizep = &size; oi.typep = &type; - if (packed_object_info(IN_PACK(entry), entry->in_pack_offset, &oi) < 0) { + if (packed_object_info(NULL, IN_PACK(entry), entry->in_pack_offset, &oi) < 0) { /* * We failed to get the info from this pack for some reason; * fall back to odb_read_object_info, which may find another copy. @@ -3804,7 +3804,7 @@ static int add_object_entry_from_pack(const struct object_id *oid, ofs = nth_packed_object_offset(p, pos); oi.typep = &type; - if (packed_object_info(p, ofs, &oi) < 0) { + if (packed_object_info(NULL, p, ofs, &oi) < 0) { die(_("could not get type of object %s in pack %s"), oid_to_hex(oid), p->pack_name); } else if (type == OBJ_COMMIT) { diff --git a/commit-graph.c b/commit-graph.c index c6d9c5c740..9dc8bd5eee 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -1538,7 +1538,7 @@ static int add_packed_commits(const struct object_id *oid, struct object_info oi = OBJECT_INFO_INIT; oi.typep = &type; - if (packed_object_info(pack, offset, &oi) < 0) + if (packed_object_info(NULL, pack, offset, &oi) < 0) die(_("unable to get type of object %s"), oid_to_hex(oid)); return add_packed_commits_oi(oid, &oi, data); diff --git a/odb/source-packed.c b/odb/source-packed.c index 42c28fba0e..43fb53b72d 100644 --- a/odb/source-packed.c +++ b/odb/source-packed.c @@ -59,7 +59,7 @@ static int odb_source_packed_read_object_info(struct odb_source *source, if (!oi) return 0; - ret = packed_object_info(e.p, e.offset, oi); + ret = packed_object_info(packed, e.p, e.offset, oi); if (ret < 0) { mark_bad_packed_object(e.p, oid); return -1; @@ -99,7 +99,7 @@ static int odb_source_packed_for_each_object_wrapper(const struct object_id *oid off_t offset = nth_packed_object_offset(pack, index_pos); struct object_info oi = *data->request; - if (packed_object_info_with_index_pos(pack, offset, + if (packed_object_info_with_index_pos(data->store, pack, offset, &index_pos, &oi) < 0) { mark_bad_packed_object(pack, oid); return -1; diff --git a/pack-bitmap.c b/pack-bitmap.c index 83eb47a28b..35774b6f0c 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -1877,7 +1877,7 @@ static unsigned long get_size_by_pos(struct bitmap_index *bitmap_git, ofs = pack_pos_to_offset(pack, pos); } - if (packed_object_info(pack, ofs, &oi) < 0) { + if (packed_object_info(NULL, pack, ofs, &oi) < 0) { struct object_id oid; nth_bitmap_object_oid(bitmap_git, &oid, pack_pos_to_index(pack, pos)); diff --git a/packfile.c b/packfile.c index 1d1b23b6cc..2b741d7a76 100644 --- a/packfile.c +++ b/packfile.c @@ -1324,7 +1324,8 @@ static void add_delta_base_cache(struct packed_git *p, off_t base_offset, hashmap_add(&delta_base_cache, &ent->ent); } -int packed_object_info_with_index_pos(struct packed_git *p, off_t obj_offset, +int packed_object_info_with_index_pos(struct odb_source_packed *source UNUSED, + struct packed_git *p, off_t obj_offset, uint32_t *maybe_index_pos, struct object_info *oi) { struct pack_window *w_curs = NULL; @@ -1446,10 +1447,11 @@ out: return ret; } -int packed_object_info(struct packed_git *p, off_t obj_offset, +int packed_object_info(struct odb_source_packed *source, + struct packed_git *p, off_t obj_offset, struct object_info *oi) { - return packed_object_info_with_index_pos(p, obj_offset, NULL, oi); + return packed_object_info_with_index_pos(source, p, obj_offset, NULL, oi); } static void *unpack_compressed_entry(struct packed_git *p, diff --git a/packfile.h b/packfile.h index 2329a69701..e1f77152b5 100644 --- a/packfile.h +++ b/packfile.h @@ -320,9 +320,11 @@ extern int do_check_packed_object_crc; * Look up the object info for a specific offset in the packfile. * Returns zero on success, a negative error code otherwise. */ -int packed_object_info(struct packed_git *pack, +int packed_object_info(struct odb_source_packed *source, + struct packed_git *pack, off_t offset, struct object_info *); -int packed_object_info_with_index_pos(struct packed_git *p, off_t obj_offset, +int packed_object_info_with_index_pos(struct odb_source_packed *source, + struct packed_git *p, off_t obj_offset, uint32_t *maybe_index_pos, struct object_info *oi); void mark_bad_packed_object(struct packed_git *, const struct object_id *); diff --git a/t/helper/test-bitmap.c b/t/helper/test-bitmap.c index b130832b81..8547ef67e2 100644 --- a/t/helper/test-bitmap.c +++ b/t/helper/test-bitmap.c @@ -52,7 +52,7 @@ static int add_packed_object(const struct object_id *oid, entry = packlist_alloc(packed, oid); entry->idx.offset = nth_packed_object_offset(pack, pos); - if (packed_object_info(pack, entry->idx.offset, &oi) < 0) + if (packed_object_info(NULL, pack, entry->idx.offset, &oi) < 0) die("could not get type of object %s", oid_to_hex(oid)); oe_set_type(entry, type);