[PATCH 07/22] teach fsck-objects.c to use cache iterators
Signed-off-by: Chuck Lever <cel@netapp.com>
---
fsck-objects.c | 27 ++++++++++++++++-----------
1 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/fsck-objects.c b/fsck-objects.c
--- a/fsck-objects.c
+++ b/fsck-objects.c
@@ -412,6 +412,20 @@ static int fsck_head_link(void)
return 0;
}
+static int mark_one_blob_reachable(struct cache_cursor *cc, struct cache_entry *ce)
+{
+ struct blob *blob = lookup_blob(ce->sha1);
+
+ if (blob) {
+ struct object *obj = &blob->object;
+ obj->used = 1;
+ mark_reachable(obj, REACHABLE);
+ }
+
+ next_cc(cc);
+ return 0;
+}
+
int main(int argc, char **argv)
{
int i, heads;
@@ -519,17 +533,8 @@ int main(int argc, char **argv)
}
if (keep_cache_objects) {
- int i;
- read_cache();
- for (i = 0; i < active_nr; i++) {
- struct blob *blob = lookup_blob(active_cache[i]->sha1);
- struct object *obj;
- if (!blob)
- continue;
- obj = &blob->object;
- obj->used = 1;
- mark_reachable(obj, REACHABLE);
- }
+ if (read_cache() > 0)
+ walk_cache(mark_one_blob_reachable);
}
check_connectivity();