match_refs() returns non-zero if there is an error in
match_explicit_refs(), without handling any remaining pattern ref specs.
Its existing callers exit upon receiving non-zero, so a partial result
is of no consequence to them; however it is about to have a new caller
that is interested in the complete result even if there are errors in
match_explicit_refs().
Signed-off-by: Jay Soffian <redacted>
---
remote.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/remote.c b/remote.c
index 64879ce..9f22aaf 100644
--- a/remote.c
+++ b/remote.c
@@ -1043,6 +1043,7 @@ int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,
struct refspec *rs;
int send_all = flags & MATCH_REFS_ALL;
int send_mirror = flags & MATCH_REFS_MIRROR;
+ int errs;
static const char *default_refspec[] = { ":", 0 };
if (!nr_refspec) {@@ -1050,8 +1051,7 @@ int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,
refspec = default_refspec;
}
rs = parse_push_refspec(nr_refspec, (const char **) refspec);
- if (match_explicit_refs(src, dst, dst_tail, rs, nr_refspec))
- return -1;
+ errs = match_explicit_refs(src, dst, dst_tail, rs, nr_refspec);
/* pick the remainder */
for ( ; src; src = src->next) {@@ -1107,6 +1107,8 @@ int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,
free_name:
free(dst_name);
}
+ if (errs)
+ return -1;
return 0;
}
--
1.6.2.rc1.291.g83eb