summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)