ref-filter: avoid backend filtering with --ignore-case
commite674eb2528229ac7f9c911369a39e7a979bfe75a
authorJeff King <peff@peff.net>
Mon, 2 Jul 2018 21:12:42 +0000 (2 17:12 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 3 Jul 2018 21:49:37 +0000 (3 14:49 -0700)
tree537ad6500413d2848c55163928826c4a664b021b
parent639ab5efa1ad79bd69abfd67bf28016db41c10d5
ref-filter: avoid backend filtering with --ignore-case

When for-each-ref is used with --ignore-case, we expect
match_name_as_path() to do a case-insensitive match. But
there's an extra layer of filtering that happens before we
even get there. Since commit cfe004a5a9 (ref-filter: limit
traversal to prefix, 2017-05-22), we feed the prefix to the
ref backend so that it can optimize the ref iteration.

There's no mechanism for us to tell the backend we're matching
case-insensitively.  Nor is there likely to be one anytime soon,
since the packed backend relies on binary-searching the sorted list
of refs. Let's just punt on this case. The extra filtering is an
optimization that we simply can't do. We'll still give the correct
answer via the filtering in match_name_as_path().

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
ref-filter.c
t/t6300-for-each-ref.sh