diff options
author | Junio C Hamano <gitster@pobox.com> | 2020-12-24 00:59:46 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-12-24 00:59:46 +0300 |
commit | 73583204d9114b4c86453f5ae74397d9f951072f (patch) | |
tree | 3283adb168a8aaa8514c5f4262d20f2d3e0d471e /remote.c | |
parent | 7a5026529529e811b41de02ca12aa6c8ff3d11c5 (diff) | |
parent | 773c694142c630ccbf161287b5c2a7ad13e8ca9f (diff) |
Merge branch 'nk/refspecs-negative-fix'
Hotfix for recent regression.
* nk/refspecs-negative-fix:
negative-refspec: improve comment on query_matches_negative_refspec
negative-refspec: fix segfault on : refspec
Diffstat (limited to 'remote.c')
-rw-r--r-- | remote.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -736,6 +736,12 @@ static int query_matches_negative_refspec(struct refspec *rs, struct refspec_ite * item uses the destination. To handle this, we apply pattern * refspecs in reverse to figure out if the query source matches any * of the negative refspecs. + * + * The first loop finds and expands all positive refspecs + * matched by the queried ref. + * + * The second loop checks if any of the results of the first loop + * match any negative refspec. */ for (i = 0; i < rs->nr; i++) { struct refspec_item *refspec = &rs->items[i]; @@ -751,9 +757,13 @@ static int query_matches_negative_refspec(struct refspec *rs, struct refspec_ite if (match_name_with_pattern(key, needle, value, &expn_name)) string_list_append_nodup(&reversed, expn_name); - } else { - if (!strcmp(needle, refspec->src)) - string_list_append(&reversed, refspec->src); + } else if (refspec->matching) { + /* For the special matching refspec, any query should match */ + string_list_append(&reversed, needle); + } else if (!refspec->src) { + BUG("refspec->src should not be null here"); + } else if (!strcmp(needle, refspec->src)) { + string_list_append(&reversed, refspec->src); } } |