reachable: reuse revision.c "add all reflogs" code
authorJeff King <peff@peff.net>
Wed, 15 Oct 2014 22:38:31 +0000 (18:38 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 16 Oct 2014 17:10:38 +0000 (10:10 -0700)
We want to add all reflog entries as tips for finding
reachable objects. The revision machinery can already do
this (to support "rev-list --reflog"); we can reuse that
code.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
reachable.c
revision.c
revision.h
index 02bf6c2fe4fc90c2f3327988b009f1dc1a3b1e2c..4e68cfadbf16c44749856895b02667209f013399 100644 (file)
@@ -22,22 +22,6 @@ static void update_progress(struct connectivity_progress *cp)
                display_progress(cp->progress, cp->count);
 }
 
-static int add_one_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
-               const char *email, unsigned long timestamp, int tz,
-               const char *message, void *cb_data)
-{
-       struct object *object;
-       struct rev_info *revs = (struct rev_info *)cb_data;
-
-       object = parse_object(osha1);
-       if (object)
-               add_pending_object(revs, object, "");
-       object = parse_object(nsha1);
-       if (object)
-               add_pending_object(revs, object, "");
-       return 0;
-}
-
 static int add_one_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
 {
        struct object *object = parse_object_or_die(sha1, path);
@@ -48,12 +32,6 @@ static int add_one_ref(const char *path, const unsigned char *sha1, int flag, vo
        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;
-}
-
 static void add_one_tree(const unsigned char *sha1, struct rev_info *revs)
 {
        struct tree *tree = lookup_tree(sha1);
@@ -138,7 +116,7 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,
 
        /* Add all reflog info */
        if (mark_reflog)
-               for_each_reflog(add_one_reflog, revs);
+               add_reflogs_to_pending(revs, 0);
 
        cp.progress = progress;
        cp.count = 0;
index 01cc276fa2bdf58eded0cc8a7210042e75600c5a..b8e02e2798d756c4069dc3092a13d309b84a399a 100644 (file)
@@ -1275,7 +1275,7 @@ static int handle_one_reflog(const char *path, const unsigned char *sha1, int fl
        return 0;
 }
 
-static void handle_reflog(struct rev_info *revs, unsigned flags)
+void add_reflogs_to_pending(struct rev_info *revs, unsigned flags)
 {
        struct all_refs_cb cb;
        cb.all_revs = revs;
@@ -2061,7 +2061,7 @@ static int handle_revision_pseudo_opt(const char *submodule,
                for_each_glob_ref_in(handle_one_ref, arg + 10, "refs/remotes/", &cb);
                clear_ref_exclusion(&revs->ref_excludes);
        } else if (!strcmp(arg, "--reflog")) {
-               handle_reflog(revs, *flags);
+               add_reflogs_to_pending(revs, *flags);
        } else if (!strcmp(arg, "--not")) {
                *flags ^= UNINTERESTING | BOTTOM;
        } else if (!strcmp(arg, "--no-walk")) {
index a6205307cf3bb2364b8642b0a4857c5b0ae9b5a9..e644044174ef17054e0edd515864ee15d8ba6fe4 100644 (file)
@@ -276,6 +276,7 @@ extern void add_pending_sha1(struct rev_info *revs,
                             unsigned int flags);
 
 extern void add_head_to_pending(struct rev_info *);
+extern void add_reflogs_to_pending(struct rev_info *, unsigned int flags);
 
 enum commit_action {
        commit_ignore,