[PATCH 11/13] remote.c: don't short-circuit match_refs() when error in match_explicit_refs()
- From
Jay Soffian <jaysoffian@gmail.com>
- Date
- Feb 23, 2009, 06:28 UTC
- Message-ID
- <6cbc71876488bd7e14db40560459c0e1b8ae7b37.1235368324.git.jaysoffian@gmail.com>
- In-Reply-To
- <cover.1235368324.git.jaysoffian@gmail.com>
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 <jaysoffian@gmail.com> --- remote.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/remote.c b/remote.c index ab387f2..5c14343 100644 --- a/remote.c +++ b/remote.c @@ -1046,6 +1046,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) { @@ -1053,8 +1054,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) { @@ -1110,6 +1110,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.223.gfed32