Matthew Hughes noticed and reported that a pathspec that uses the attribute magic with pathspec pattern does not work correctly. After digging around, I found that $ git ls-files ":(attr:label)" notices that the "label" attribute is set to path "sub/file" by listing it, and combined with a pathspec pattern, i.e. $ git ls-files ":(attr:label)sub" it still correctly reports "sub/file" has the "label" attribute, be it defined in ".gitignore" or "sub/.gitignore". The case that it does not work is the command invocation is $ git ls-files ":(attr:label)sub/" and the attribute "label" is defined in "sub/.gitattributes" for "sub/file". It turns out that the problematic invocation triggers the common prefix optimization, which is totally broken for this case. The first patch enhances the test coverage, and the second patch fixes the broken common prefix optimization. Junio C Hamano (2): t6135: attr magic with path pattern dir: do not feed path suffix to pathspec match dir.c | 31 ++++++----------------- t/t6135-pathspec-with-attrs.sh | 46 ++++++++++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 25 deletions(-) -- 2.41.0-318-g061c58647e