grep: stop looking at random places for .gitattributes
grep searches for .gitattributes using "name" field in struct grep_source but that field is not real on-disk path name. For example, "grep pattern rev" fills the field with "rev:path", and Git looks for .gitattributes in the (non-existent but exploitable) path "rev:path" instead of "path". This patch passes real paths down to grep_source_load_driver() when: - grep on work tree - grep on the index - grep a commit (or a tag if it points to a commit) so that these cases look up .gitattributes at proper paths. .gitattributes lookup is disabled in all other cases. Initial-work-by: Jeff King <peff@peff.net> 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
40701adbcb
commit
55c61688ea
@ -111,6 +111,28 @@ test_expect_success 'grep respects binary diff attribute' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'grep --cached respects binary diff attribute' '
|
||||
git grep --cached text t >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'grep --cached respects binary diff attribute (2)' '
|
||||
git add .gitattributes &&
|
||||
rm .gitattributes &&
|
||||
git grep --cached text t >actual &&
|
||||
test_when_finished "git rm --cached .gitattributes" &&
|
||||
test_when_finished "git checkout .gitattributes" &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'grep revision respects binary diff attribute' '
|
||||
git commit -m new &&
|
||||
echo "Binary file HEAD:t matches" >expect &&
|
||||
git grep text HEAD -- t >actual &&
|
||||
test_when_finished "git reset HEAD^" &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'grep respects not-binary diff attribute' '
|
||||
echo binQary | q_to_nul >b &&
|
||||
git add b &&
|
||||
|
Reference in New Issue
Block a user