diff options
author | Jay Soffian <jaysoffian@gmail.com> | 2009-02-25 03:32:17 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-02-27 15:19:08 -0800 |
commit | 5f48cb95aa0d7311623df76249a1c8a1962550f5 (patch) | |
tree | 6ae850ef62c422692d5a0d3e67b02026bfb654c2 | |
parent | cdf690e53b5f5af1ca8679b3f3e47ea198692c18 (diff) | |
download | git-5f48cb95aa0d7311623df76249a1c8a1962550f5.tar.gz git-5f48cb95aa0d7311623df76249a1c8a1962550f5.tar.xz |
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>
-rw-r--r-- | remote.c | 6 |
1 files changed, 4 insertions, 2 deletions
@@ -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; } |