summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-11-19 06:13:33 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-11-20 02:44:29 (GMT)
commitef06b91804ff5a626e265c6d9080bbc0e7924e88 (patch)
treea73de6571e4d96a0277ab2528a34cc993eb75bf6
parent6c96c0f1940b0247530d21b10042d16bf1e7b769 (diff)
downloadgit-ef06b91804ff5a626e265c6d9080bbc0e7924e88.zip
git-ef06b91804ff5a626e265c6d9080bbc0e7924e88.tar.gz
git-ef06b91804ff5a626e265c6d9080bbc0e7924e88.tar.bz2
do_for_each_ref: perform the same sanity check for leftovers.
An earlier commit b37a562a added a check to see if the ref points at a valid object (as a part of 'negative ref' support which we currently do not use), but did so only while iterating over both packed and loose refs, and forgot to apply the same check while iterating over the remaining ones. We might want to replace the "if null then omit it" check with "eh --- what business does a 0{40} value have here?" complaint later since we currently do not use negative refs, but that is a separate issue. Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--refs.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/refs.c b/refs.c
index f003a0b..0e156c5 100644
--- a/refs.c
+++ b/refs.c
@@ -322,6 +322,20 @@ int read_ref(const char *ref, unsigned char *sha1)
return -1;
}
+static int do_one_ref(const char *base, each_ref_fn fn, int trim,
+ void *cb_data, struct ref_list *entry)
+{
+ if (strncmp(base, entry->name, trim))
+ return 0;
+ if (is_null_sha1(entry->sha1))
+ return 0;
+ if (!has_sha1_file(entry->sha1)) {
+ error("%s does not point to a valid object!", entry->name);
+ return 0;
+ }
+ return fn(entry->name + trim, entry->sha1, entry->flag, cb_data);
+}
+
static int do_for_each_ref(const char *base, each_ref_fn fn, int trim,
void *cb_data)
{
@@ -343,29 +357,15 @@ static int do_for_each_ref(const char *base, each_ref_fn fn, int trim,
entry = packed;
packed = packed->next;
}
- if (strncmp(base, entry->name, trim))
- continue;
- if (is_null_sha1(entry->sha1))
- continue;
- if (!has_sha1_file(entry->sha1)) {
- error("%s does not point to a valid object!", entry->name);
- continue;
- }
- retval = fn(entry->name + trim, entry->sha1,
- entry->flag, cb_data);
+ retval = do_one_ref(base, fn, trim, cb_data, entry);
if (retval)
return retval;
}
- packed = packed ? packed : loose;
- while (packed) {
- if (!strncmp(base, packed->name, trim)) {
- retval = fn(packed->name + trim, packed->sha1,
- packed->flag, cb_data);
- if (retval)
- return retval;
- }
- packed = packed->next;
+ for (packed = packed ? packed : loose; packed; packed = packed->next) {
+ retval = do_one_ref(base, fn, trim, cb_data, packed);
+ if (retval)
+ return retval;
}
return 0;
}