3 test_description
='git grep in binary files'
7 test_expect_success
'setup' "
8 echo 'binaryQfileQm[*]cQ*æQð' | q_to_nul >a &&
13 test_expect_success
'git grep ina a' '
14 echo Binary file a matches >expect &&
15 git grep ina a >actual &&
16 test_cmp expect actual
19 test_expect_success
'git grep -ah ina a' '
20 git grep -ah ina a >actual &&
24 test_expect_success
'git grep -I ina a' '
25 test_must_fail git grep -I ina a >actual &&
26 test_must_be_empty actual
29 test_expect_success
'git grep -c ina a' '
31 git grep -c ina a >actual &&
32 test_cmp expect actual
35 test_expect_success
'git grep -l ina a' '
37 git grep -l ina a >actual &&
38 test_cmp expect actual
41 test_expect_success
'git grep -L bar a' '
43 git grep -L bar a >actual &&
44 test_cmp expect actual
47 test_expect_success
'git grep -q ina a' '
48 git grep -q ina a >actual &&
49 test_must_be_empty actual
52 test_expect_success
'git grep -F ile a' '
56 test_expect_success
'git grep -Fi iLE a' '
60 # This test actually passes on platforms where regexec() supports the
62 test_expect_success
'git grep ile a' '
66 test_expect_failure
'git grep .fi a' '
70 test_expect_success
'grep respects binary diff attribute' '
73 echo t:text >expect &&
74 git grep text t >actual &&
75 test_cmp expect actual &&
76 echo "t -diff" >.gitattributes &&
77 echo "Binary file t matches" >expect &&
78 git grep text t >actual &&
79 test_cmp expect actual
82 test_expect_success
'grep --cached respects binary diff attribute' '
83 git grep --cached text t >actual &&
84 test_cmp expect actual
87 test_expect_success
'grep --cached respects binary diff attribute (2)' '
88 git add .gitattributes &&
90 git grep --cached text t >actual &&
91 test_when_finished "git rm --cached .gitattributes" &&
92 test_when_finished "git checkout .gitattributes" &&
93 test_cmp expect actual
96 test_expect_success
'grep revision respects binary diff attribute' '
98 echo "Binary file HEAD:t matches" >expect &&
99 git grep text HEAD -- t >actual &&
100 test_when_finished "git reset HEAD^" &&
101 test_cmp expect actual
104 test_expect_success
'grep respects not-binary diff attribute' '
105 echo binQary | q_to_nul >b &&
107 echo "Binary file b matches" >expect &&
108 git grep bin b >actual &&
109 test_cmp expect actual &&
110 echo "b diff" >.gitattributes &&
111 echo "b:binQary" >expect &&
112 git grep bin b >actual.raw &&
113 nul_to_q <actual.raw >actual &&
114 test_cmp expect actual
117 cat >nul_to_q_textconv
<<'EOF'
119 "$PERL_PATH" -pe 'y/\000/Q/' < "$1"
121 chmod +x nul_to_q_textconv
123 test_expect_success
'setup textconv filters' '
124 echo a diff=foo >.gitattributes &&
125 git config diff.foo.textconv "\"$(pwd)\""/nul_to_q_textconv
128 test_expect_success
'grep does not honor textconv' '
129 test_must_fail git grep Qfile
132 test_expect_success
'grep --textconv honors textconv' '
133 echo "a:binaryQfileQm[*]cQ*æQð" >expect &&
134 git grep --textconv Qfile >actual &&
135 test_cmp expect actual
138 test_expect_success
'grep --no-textconv does not honor textconv' '
139 test_must_fail git grep --no-textconv Qfile
142 test_expect_success
'grep --textconv blob honors textconv' '
143 echo "HEAD:a:binaryQfileQm[*]cQ*æQð" >expect &&
144 git grep --textconv Qfile HEAD:a >actual &&
145 test_cmp expect actual