1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
#!/bin/sh
test_description='git grep in binary files'
. ./test-lib.sh
test_expect_success 'setup' "
echo 'binaryQfileQm[*]cQ*æQð' | q_to_nul >a &&
git add a &&
git commit -m.
"
test_expect_success 'git grep ina a' '
echo Binary file a matches >expect &&
git grep ina a >actual &&
test_cmp expect actual
'
test_expect_success 'git grep -ah ina a' '
git grep -ah ina a >actual &&
test_cmp a actual
'
test_expect_success 'git grep -I ina a' '
test_must_fail git grep -I ina a >actual &&
test_must_be_empty actual
'
test_expect_success 'git grep -c ina a' '
echo a:1 >expect &&
git grep -c ina a >actual &&
test_cmp expect actual
'
test_expect_success 'git grep -l ina a' '
echo a >expect &&
git grep -l ina a >actual &&
test_cmp expect actual
'
test_expect_success 'git grep -L bar a' '
echo a >expect &&
git grep -L bar a >actual &&
test_cmp expect actual
'
test_expect_success 'git grep -q ina a' '
git grep -q ina a >actual &&
test_must_be_empty actual
'
test_expect_success 'git grep -F ile a' '
git grep -F ile a
'
test_expect_success 'git grep -Fi iLE a' '
git grep -Fi iLE a
'
# This test actually passes on platforms where regexec() supports the
# flag REG_STARTEND.
test_expect_success 'git grep ile a' '
git grep ile a
'
test_expect_failure !CYGWIN 'git grep .fi a' '
git grep .fi a
'
test_expect_success 'grep respects binary diff attribute' '
echo text >t &&
git add t &&
echo t:text >expect &&
git grep text t >actual &&
test_cmp expect actual &&
echo "t -diff" >.gitattributes &&
echo "Binary file t matches" >expect &&
git grep text t >actual &&
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 &&
echo "Binary file b matches" >expect &&
git grep bin b >actual &&
test_cmp expect actual &&
echo "b diff" >.gitattributes &&
echo "b:binQary" >expect &&
git grep bin b >actual.raw &&
nul_to_q <actual.raw >actual &&
test_cmp expect actual
'
test_expect_success 'setup textconv filters' '
write_script nul_to_q_textconv <<-\EOF &&
tr "\000" "Q" <"$1"
EOF
echo a diff=foo >.gitattributes &&
git config diff.foo.textconv "\"$(pwd)\""/nul_to_q_textconv
'
test_expect_success 'grep does not honor textconv' '
test_must_fail git grep Qfile
'
test_expect_success 'grep --textconv honors textconv' '
echo "a:binaryQfileQm[*]cQ*æQð" >expect &&
git grep --textconv Qfile >actual &&
test_cmp expect actual
'
test_expect_success 'grep --no-textconv does not honor textconv' '
test_must_fail git grep --no-textconv Qfile
'
test_expect_success 'grep --textconv blob honors textconv' '
echo "HEAD:a:binaryQfileQm[*]cQ*æQð" >expect &&
git grep --textconv Qfile HEAD:a >actual &&
test_cmp expect actual
'
test_done
|