summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Michael Haggerty <mhagger@alum.mit.edu>2012-09-09 08:19:45 +0200
committerLibravatar Junio C Hamano <gitster@pobox.com>2012-09-12 11:46:31 -0700
commitf537cfa7501de5e4dcdac55a95515e9a2ff880e3 (patch)
tree3d91011e03fbee09ef9a94d86c60d238f2f1fa9f
parentfilter_refs(): build refs list as we go (diff)
downloadtgif-f537cfa7501de5e4dcdac55a95515e9a2ff880e3.tar.xz
filter_refs(): simplify logic
Simplify flow within loop: first decide whether to keep the reference, then keep/free it. This makes it clearer that each ref has exactly two possible destinies, and removes duplication of the code for appending the reference to the linked list. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/fetch-pack.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index 4e94aa4635..056ccb8667 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -544,37 +544,36 @@ static void filter_refs(struct ref **refs, struct string_list *sought)
sought_pos = 0;
for (ref = *refs; ref; ref = next) {
+ int keep = 0;
next = ref->next;
if (!memcmp(ref->name, "refs/", 5) &&
check_refname_format(ref->name + 5, 0))
; /* trash */
else if (args.fetch_all &&
- (!args.depth || prefixcmp(ref->name, "refs/tags/") )) {
- *newtail = ref;
- ref->next = NULL;
- newtail = &ref->next;
- continue;
- }
+ (!args.depth || prefixcmp(ref->name, "refs/tags/")))
+ keep = 1;
else {
- int cmp = -1;
while (sought_pos < sought->nr) {
- cmp = strcmp(ref->name, sought->items[sought_pos].string);
- if (cmp < 0) /* definitely do not have it */
- break;
- else if (cmp == 0) { /* definitely have it */
+ int cmp = strcmp(ref->name, sought->items[sought_pos].string);
+ if (cmp < 0)
+ break; /* definitely do not have it */
+ else if (cmp == 0) {
+ keep = 1; /* definitely have it */
sought->items[sought_pos++].util = "matched";
- *newtail = ref;
- ref->next = NULL;
- newtail = &ref->next;
break;
}
- else /* might have it; keep looking */
- sought_pos++;
+ else
+ sought_pos++; /* might have it; keep looking */
}
- if (!cmp)
- continue; /* we will link it later */
}
- free(ref);
+
+ if (keep) {
+ *newtail = ref;
+ ref->next = NULL;
+ newtail = &ref->next;
+ } else {
+ free(ref);
+ }
}
if (!args.fetch_all)