summaryrefslogtreecommitdiff
path: root/remote.c
diff options
context:
space:
mode:
authorJay Soffian <jaysoffian@gmail.com>2009-02-25 03:32:17 -0500
committerJunio C Hamano <gitster@pobox.com>2009-02-27 15:19:08 -0800
commit5f48cb95aa0d7311623df76249a1c8a1962550f5 (patch)
tree6ae850ef62c422692d5a0d3e67b02026bfb654c2 /remote.c
parentcdf690e53b5f5af1ca8679b3f3e47ea198692c18 (diff)
downloadgit-5f48cb95aa0d7311623df76249a1c8a1962550f5.tar.gz
remote: make match_refs() not short-circuit
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 a new caller, builtin-remote, is interested in the complete result even if there are errors in match_explicit_refs(). Signed-off-by: Jay Soffian <jaysoffian@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'remote.c')
-rw-r--r--remote.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/remote.c b/remote.c
index b7606acc47..2123005d4b 100644
--- a/remote.c
+++ b/remote.c
@@ -1052,6 +1052,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) {
@@ -1059,8 +1060,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) {
@@ -1116,6 +1116,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;
}