for-each-ref: consistently pass WM_IGNORECASE flag
authorAleksandr Makarov <aleksandr.o.makarov@gmail.com>
Mon, 2 Jul 2018 21:11:59 +0000 (17:11 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 3 Jul 2018 21:49:15 +0000 (14:49 -0700)
The match_name_as_path() function learned to set
WM_IGNORECASE in the "flags" field when the user passed
--ignore-case. But it forgot to actually pass the flags to
wildmatch()!

As a result, the --ignore-case feature has been broken since
it was added in 3bb16a8bf2 (tag, branch, for-each-ref: add
--ignore-case for sorting and filtering, 2016-12-04). We
didn't notice because we added tests only for git-branch and
git-tag. Whereas git-for-each-ref has slightly different
matching rules, and thus uses a different function (the
related function match_pattern() does it correctly).

Incidentally, this also caused clang's scan-build to
complain about the code; the assignment to "flags" was dead
code.

Note that we can't flip the test in t6300 to expect_success
yet. There's another bug, which will be dealt with in the
next patch.

Commit-message-by: Jeff King <peff@peff.net>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
ref-filter.c
index 45fc56216aaa8fd084a10514f6f4912878ab1627..c0e257c79e536c136d59dd5e8cd34251d7ed1b0e 100644 (file)
@@ -1714,7 +1714,7 @@ static int match_name_as_path(const struct ref_filter *filter, const char *refna
                     refname[plen] == '/' ||
                     p[plen-1] == '/'))
                        return 1;
-               if (!wildmatch(p, refname, WM_PATHNAME))
+               if (!wildmatch(p, refname, flags))
                        return 1;
        }
        return 0;