aboutsummaryrefslogtreecommitdiff
path: root/builtin/fsck.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2026-03-02 17:06:50 -0800
committerJunio C Hamano <gitster@pobox.com>2026-03-02 17:06:50 -0800
commit9eb5b3b999cb89d4a09dcf1012784e74154026de (patch)
treeec9e98a84acf1ba2ca9db5f777dce32449ffcaff /builtin/fsck.c
parent2cc71917514657b93014134350864f4849edfc83 (diff)
parent3565faf28c2059c6260d53ac71a303b1c04b0a7b (diff)
downloadgit-9eb5b3b999cb89d4a09dcf1012784e74154026de.tar.xz
Merge branch 'ps/odb-for-each-object'
Revamp object enumeration API around odb. * 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 'builtin/fsck.c')
-rw-r--r--builtin/fsck.c57
1 files changed, 12 insertions, 45 deletions
diff --git a/builtin/fsck.c b/builtin/fsck.c
index 0512f78a87..80e298049f 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -219,15 +219,17 @@ static int mark_used(struct object *obj, enum object_type type UNUSED,
return 0;
}
-static void mark_unreachable_referents(const struct object_id *oid)
+static int mark_unreachable_referents(const struct object_id *oid,
+ struct object_info *oi UNUSED,
+ void *data UNUSED)
{
struct fsck_options options = FSCK_OPTIONS_DEFAULT;
struct object *obj = lookup_object(the_repository, oid);
if (!obj || !(obj->flags & HAS_OBJ))
- return; /* not part of our original set */
+ return 0; /* not part of our original set */
if (obj->flags & REACHABLE)
- return; /* reachable objects already traversed */
+ return 0; /* reachable objects already traversed */
/*
* Avoid passing OBJ_NONE to fsck_walk, which will parse the object
@@ -244,22 +246,7 @@ static void mark_unreachable_referents(const struct object_id *oid)
fsck_walk(obj, NULL, &options);
if (obj->type == OBJ_TREE)
free_tree_buffer((struct tree *)obj);
-}
-static int mark_loose_unreachable_referents(const struct object_id *oid,
- const char *path UNUSED,
- void *data UNUSED)
-{
- mark_unreachable_referents(oid);
- return 0;
-}
-
-static int mark_packed_unreachable_referents(const struct object_id *oid,
- struct packed_git *pack UNUSED,
- uint32_t pos UNUSED,
- void *data UNUSED)
-{
- mark_unreachable_referents(oid);
return 0;
}
@@ -395,12 +382,8 @@ static void check_connectivity(void)
* and ignore any that weren't present in our earlier
* traversal.
*/
- for_each_loose_object(the_repository->objects,
- mark_loose_unreachable_referents, NULL, 0);
- for_each_packed_object(the_repository,
- mark_packed_unreachable_referents,
- NULL,
- 0);
+ odb_for_each_object(the_repository->objects, NULL,
+ mark_unreachable_referents, NULL, 0);
}
/* Look up all the requirements, warn about missing objects.. */
@@ -900,26 +883,12 @@ static void fsck_index(struct index_state *istate, const char *index_path,
fsck_resolve_undo(istate, index_path);
}
-static void mark_object_for_connectivity(const struct object_id *oid)
+static int mark_object_for_connectivity(const struct object_id *oid,
+ struct object_info *oi UNUSED,
+ void *cb_data UNUSED)
{
struct object *obj = lookup_unknown_object(the_repository, oid);
obj->flags |= HAS_OBJ;
-}
-
-static int mark_loose_for_connectivity(const struct object_id *oid,
- const char *path UNUSED,
- void *data UNUSED)
-{
- mark_object_for_connectivity(oid);
- return 0;
-}
-
-static int mark_packed_for_connectivity(const struct object_id *oid,
- struct packed_git *pack UNUSED,
- uint32_t pos UNUSED,
- void *data UNUSED)
-{
- mark_object_for_connectivity(oid);
return 0;
}
@@ -1068,10 +1037,8 @@ int cmd_fsck(int argc,
odb_reprepare(the_repository->objects);
if (connectivity_only) {
- for_each_loose_object(the_repository->objects,
- mark_loose_for_connectivity, NULL, 0);
- for_each_packed_object(the_repository,
- mark_packed_for_connectivity, NULL, 0);
+ odb_for_each_object(the_repository->objects, NULL,
+ mark_object_for_connectivity, NULL, 0);
} else {
odb_prepare_alternates(the_repository->objects);
for (source = the_repository->objects->sources; source; source = source->next)