packfile: introduce macro to iterate through packs

We have a bunch of different sites that want to iterate through all
packs of a given `struct packfile_store`. This pattern is somewhat
verbose and repetitive, which makes it somewhat cumbersome.

Introduce a new macro `repo_for_each_pack()` that removes some of the
boilerplate.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt
2025-10-09 10:01:39 +02:00
committed by Junio C Hamano
parent 5b410c8276
commit 86d8c62f48
20 changed files with 57 additions and 75 deletions

View File

@@ -39,11 +39,12 @@ int cmd__find_pack(int argc, const char **argv)
if (repo_get_oid(the_repository, argv[0], &oid))
die("cannot parse %s as an object name", argv[0]);
for (p = packfile_store_get_all_packs(the_repository->objects->packfiles); p; p = p->next)
repo_for_each_pack(the_repository, p) {
if (find_pack_entry_one(&oid, p)) {
printf("%s\n", p->pack_name);
actual_count++;
}
}
if (count > -1 && count != actual_count)
die("bad packfile count %d instead of %d", actual_count, count);

View File

@@ -37,7 +37,7 @@ int cmd__pack_mtimes(int argc, const char **argv)
if (argc != 2)
usage(pack_mtimes_usage);
for (p = packfile_store_get_all_packs(the_repository->objects->packfiles); p; p = p->next) {
repo_for_each_pack(the_repository, p) {
strbuf_addstr(&buf, basename(p->pack_name));
strbuf_strip_suffix(&buf, ".pack");
strbuf_addstr(&buf, ".mtimes");