attr: more matching optimizations from .gitignore
.gitattributes and .gitignore share the same pattern syntax but has separate matching implementation. Over the years, ignore's implementation accumulates more optimizations while attr's stays the same. This patch reuses the core matching functions that are also used by excluded_from_list. excluded_from_list and path_matches can't be merged due to differences in exclude and attr, for example: * "!pattern" syntax is forbidden in .gitattributes. As an attribute can be unset (i.e. set to a special value "false") or made back to unspecified (i.e. not even set to "false"), "!pattern attr" is unclear which one it means. * we support attaching attributes to directories, but git-core internally does not currently make use of attributes on directories. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
84460eec8d
commit
82dce998c2
@ -206,6 +206,16 @@ test_expect_success 'root subdir attribute test' '
|
||||
attr_check subdir/a/i unspecified
|
||||
'
|
||||
|
||||
test_expect_success 'negative patterns' '
|
||||
echo "!f test=bar" >.gitattributes &&
|
||||
test_must_fail git check-attr test -- f
|
||||
'
|
||||
|
||||
test_expect_success 'patterns starting with exclamation' '
|
||||
echo "\!f test=foo" >.gitattributes &&
|
||||
attr_check "!f" foo
|
||||
'
|
||||
|
||||
test_expect_success 'setup bare' '
|
||||
git clone --bare . bare.git &&
|
||||
cd bare.git
|
||||
|
Reference in New Issue
Block a user