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