aboutsummaryrefslogtreecommitdiff
path: root/odb.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2026-02-23 13:48:00 -0800
committerJunio C Hamano <gitster@pobox.com>2026-02-23 13:48:00 -0800
commit703c97519dfac64291f79b1772e25c65d233e97e (patch)
treeeaa54faaa2f776393ba94dd35ef37cded5649f62 /odb.c
parent7c02d39fc2ed2702223c7674f73150d9a7e61ba4 (diff)
parent3565faf28c2059c6260d53ac71a303b1c04b0a7b (diff)
downloadgit-703c97519dfac64291f79b1772e25c65d233e97e.tar.xz
Merge branch 'ps/odb-for-each-object' into ps/odb-sources
* ps/odb-for-each-object: odb: drop unused `for_each_{loose,packed}_object()` functions reachable: convert to use `odb_for_each_object()` builtin/pack-objects: use `packfile_store_for_each_object()` odb: introduce mtime fields for object info requests treewide: drop uses of `for_each_{loose,packed}_object()` treewide: enumerate promisor objects via `odb_for_each_object()` builtin/fsck: refactor to use `odb_for_each_object()` odb: introduce `odb_for_each_object()` packfile: introduce function to iterate through objects packfile: extract function to iterate through objects of a store object-file: introduce function to iterate through objects object-file: extract function to read object info from path odb: fix flags parameter to be unsigned odb: rename `FOR_EACH_OBJECT_*` flags
Diffstat (limited to 'odb.c')
-rw-r--r--odb.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/odb.c b/odb.c
index 1679cc0465..025cd76520 100644
--- a/odb.c
+++ b/odb.c
@@ -702,6 +702,8 @@ static int do_oid_object_info_extended(struct object_database *odb,
oidclr(oi->delta_base_oid, odb->repo->hash_algo);
if (oi->contentp)
*oi->contentp = xmemdupz(co->buf, co->size);
+ if (oi->mtimep)
+ *oi->mtimep = 0;
oi->whence = OI_CACHED;
}
return 0;
@@ -995,6 +997,35 @@ int odb_freshen_object(struct object_database *odb,
return 0;
}
+int odb_for_each_object(struct object_database *odb,
+ const struct object_info *request,
+ odb_for_each_object_cb cb,
+ void *cb_data,
+ unsigned flags)
+{
+ int ret;
+
+ odb_prepare_alternates(odb);
+ for (struct odb_source *source = odb->sources; source; source = source->next) {
+ if (flags & ODB_FOR_EACH_OBJECT_LOCAL_ONLY && !source->local)
+ continue;
+
+ if (!(flags & ODB_FOR_EACH_OBJECT_PROMISOR_ONLY)) {
+ ret = odb_source_loose_for_each_object(source, request,
+ cb, cb_data, flags);
+ if (ret)
+ return ret;
+ }
+
+ ret = packfile_store_for_each_object(source->packfiles, request,
+ cb, cb_data, flags);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
void odb_assert_oid_type(struct object_database *odb,
const struct object_id *oid, enum object_type expect)
{