aboutsummaryrefslogtreecommitdiff
path: root/builtin/pack-objects.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2026-01-26 10:51:28 +0100
committerJunio C Hamano <gitster@pobox.com>2026-01-26 08:26:08 -0800
commitdd097bbe295d58fa698708d3754426f664fdfe02 (patch)
tree715dae33846740bd24cf47cc6ab4034a7c5e1f1e /builtin/pack-objects.c
parent7b7cbaef2781cf755bc900e871964ae62ad532c5 (diff)
downloadgit-dd097bbe295d58fa698708d3754426f664fdfe02.tar.xz
builtin/pack-objects: use `packfile_store_for_each_object()`
When enumerating objects that are supposed to be stored in a new cruft pack we use `for_each_packed_object()` and then derive each object's mtime individually. Refactor this logic to instead use the new `packfile_store_for_each_object()` function with an object info request that asks for the respective mtimes. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/pack-objects.c')
-rw-r--r--builtin/pack-objects.c46
1 files changed, 22 insertions, 24 deletions
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 74317051fd..a6d37366ff 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -4314,25 +4314,12 @@ static void show_edge(struct commit *commit)
}
static int add_object_in_unpacked_pack(const struct object_id *oid,
- struct packed_git *pack,
- uint32_t pos,
+ struct object_info *oi,
void *data UNUSED)
{
if (cruft) {
- off_t offset;
- time_t mtime;
-
- if (pack->is_cruft) {
- if (load_pack_mtimes(pack) < 0)
- die(_("could not load cruft pack .mtimes"));
- mtime = nth_packed_mtime(pack, pos);
- } else {
- mtime = pack->mtime;
- }
- offset = nth_packed_object_offset(pack, pos);
-
- add_cruft_object_entry(oid, OBJ_NONE, pack, offset,
- NULL, mtime);
+ add_cruft_object_entry(oid, OBJ_NONE, oi->u.packed.pack,
+ oi->u.packed.offset, NULL, *oi->mtimep);
} else {
add_object_entry(oid, OBJ_NONE, "", 0);
}
@@ -4341,14 +4328,25 @@ static int add_object_in_unpacked_pack(const struct object_id *oid,
static void add_objects_in_unpacked_packs(void)
{
- if (for_each_packed_object(to_pack.repo,
- add_object_in_unpacked_pack,
- NULL,
- ODB_FOR_EACH_OBJECT_PACK_ORDER |
- ODB_FOR_EACH_OBJECT_LOCAL_ONLY |
- ODB_FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS |
- ODB_FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS))
- die(_("cannot open pack index"));
+ struct odb_source *source;
+ time_t mtime;
+ struct object_info oi = {
+ .mtimep = &mtime,
+ };
+
+ odb_prepare_alternates(to_pack.repo->objects);
+ for (source = to_pack.repo->objects->sources; source; source = source->next) {
+ if (!source->local)
+ continue;
+
+ if (packfile_store_for_each_object(source->packfiles, &oi,
+ add_object_in_unpacked_pack, NULL,
+ ODB_FOR_EACH_OBJECT_PACK_ORDER |
+ ODB_FOR_EACH_OBJECT_LOCAL_ONLY |
+ ODB_FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS |
+ ODB_FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS))
+ die(_("cannot open pack index"));
+ }
}
static int add_loose_object(const struct object_id *oid, const char *path,