refs: manage current_ref within do_one_ref()
authorMichael Haggerty <mhagger@alum.mit.edu>
Tue, 10 Apr 2012 05:30:14 +0000 (07:30 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 10 Apr 2012 22:51:52 +0000 (15:51 -0700)
Set and clear current_ref within do_one_ref() instead of setting it
here and leaving it to somebody else to clear it.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c

diff --git a/refs.c b/refs.c
index a8f28bdcf56511bca03399f481848b83d13e1466..86e05dbd84d296034317db3d3de2019ef14decc9 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -250,6 +250,7 @@ static struct ref_entry *current_ref;
 static int do_one_ref(const char *base, each_ref_fn fn, int trim,
                      int flags, void *cb_data, struct ref_entry *entry)
 {
+       int retval;
        if (prefixcmp(entry->name, base))
                return 0;
 
@@ -262,7 +263,9 @@ static int do_one_ref(const char *base, each_ref_fn fn, int trim,
                }
        }
        current_ref = entry;
-       return fn(entry->name + trim, entry->sha1, entry->flag, cb_data);
+       retval = fn(entry->name + trim, entry->sha1, entry->flag, cb_data);
+       current_ref = NULL;
+       return retval;
 }
 
 /*
@@ -872,7 +875,7 @@ static int do_for_each_ref(const char *submodule, const char *base, each_ref_fn
                }
                retval = do_one_ref(base, fn, trim, flags, cb_data, entry);
                if (retval)
-                       goto end_each;
+                       return retval;
        }
 
        if (l < loose->nr) {
@@ -883,12 +886,10 @@ static int do_for_each_ref(const char *submodule, const char *base, each_ref_fn
        for (; p < packed->nr; p++) {
                retval = do_one_ref(base, fn, trim, flags, cb_data, packed->refs[p]);
                if (retval)
-                       goto end_each;
+                       return retval;
        }
 
-end_each:
-       current_ref = NULL;
-       return retval;
+       return 0;
 }
 
 static int do_head_ref(const char *submodule, each_ref_fn fn, void *cb_data)