builtin-prune: separate ref walking from reflog walking.
authorJunio C Hamano <junkio@cox.net>
Sat, 6 Jan 2007 10:16:14 +0000 (02:16 -0800)
committerJunio C Hamano <junkio@cox.net>
Sun, 7 Jan 2007 06:57:34 +0000 (22:57 -0800)
This is necessary for the next step, because the reason I am
making the connectivity walker into a library is because I want
to use it for cleaning up stale reflog entries.

Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-prune.c

index 95228645d58cd0c83d023f62f301180b5347cac4..cd079b419cf2792550809a398ba1e7abf60d550f 100644 (file)
@@ -203,8 +203,12 @@ static int add_one_ref(const char *path, const unsigned char *sha1, int flag, vo
                die("bad object ref: %s:%s", path, sha1_to_hex(sha1));
        add_pending_object(revs, object, "");
 
-       for_each_reflog_ent(path, add_one_reflog_ent, cb_data);
+       return 0;
+}
 
+static int add_one_reflog(const char *path, const unsigned char *sha1, int flag, void *cb_data)
+{
+       for_each_reflog_ent(path, add_one_reflog_ent, cb_data);
        return 0;
 }
 
@@ -267,12 +271,15 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
        revs.blob_objects = 1;
        revs.tree_objects = 1;
 
-       /* Add all external refs, along with its reflog info */
+       /* Add all external refs */
        for_each_ref(add_one_ref, &revs);
 
        /* Add all refs from the index file */
        add_cache_refs(&revs);
 
+       /* Add all reflog info from refs */
+       for_each_ref(add_one_reflog, &revs);
+
        /*
         * Set up the revision walk - this will move all commits
         * from the pending list to the commit walking list.