From: Chuck Lever Date: Mon, 12 Sep 2005 14:55:58 GMT Subject: [PATCH 07/22] teach fsck-objects.c to use cache iterators Message-ID: <20050912145558.28120.91494.stgit@dexter.citi.umich.edu> In-Reply-To: <20050912145543.28120.7086.stgit@dexter.citi.umich.edu> Signed-off-by: Chuck Lever --- 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();