t4019 "grep" portability fix

Input to "grep" is supposed to be "text", but we deliberately feed output
from "git diff --color" to sift it into two sets of lines (ones with
errors, the other without).  Some implementations of "grep" only report
matches with the exit status, without showing the matched lines in their
output (e.g. OpenBSD 4.6, which says "Binary file .. matches").

Fortunately, "grep -a" is often a way to force the command to treat its
input as text.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2009-12-26 13:53:17 -08:00
parent 15caa41053
commit eca4460eeb

View File

@ -20,11 +20,27 @@ test_expect_success setup '
blue_grep='7;34m' ;# ESC [ 7 ; 3 4 m blue_grep='7;34m' ;# ESC [ 7 ; 3 4 m
printf "\033[%s" "$blue_grep" >check-grep
if (grep "$blue_grep" <check-grep | grep "$blue_grep") >/dev/null 2>&1
then
grep_a=grep
elif (grep -a "$blue_grep" <check-grep | grep -a "$blue_grep") >/dev/null 2>&1
then
grep_a='grep -a'
else
grep_a=grep ;# expected to fail...
fi
rm -f check-grep
prepare_output () {
git diff --color >output
$grep_a "$blue_grep" output >error
$grep_a -v "$blue_grep" output >normal
}
test_expect_success default ' test_expect_success default '
git diff --color >output prepare_output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
grep Eight normal >/dev/null && grep Eight normal >/dev/null &&
grep HT error >/dev/null && grep HT error >/dev/null &&
@ -37,9 +53,7 @@ test_expect_success default '
test_expect_success 'without -trail' ' test_expect_success 'without -trail' '
git config core.whitespace -trail git config core.whitespace -trail
git diff --color >output prepare_output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
grep Eight normal >/dev/null && grep Eight normal >/dev/null &&
grep HT error >/dev/null && grep HT error >/dev/null &&
@ -53,9 +67,7 @@ test_expect_success 'without -trail (attribute)' '
git config --unset core.whitespace git config --unset core.whitespace
echo "F whitespace=-trail" >.gitattributes echo "F whitespace=-trail" >.gitattributes
git diff --color >output prepare_output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
grep Eight normal >/dev/null && grep Eight normal >/dev/null &&
grep HT error >/dev/null && grep HT error >/dev/null &&
@ -69,9 +81,7 @@ test_expect_success 'without -space' '
rm -f .gitattributes rm -f .gitattributes
git config core.whitespace -space git config core.whitespace -space
git diff --color >output prepare_output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
grep Eight normal >/dev/null && grep Eight normal >/dev/null &&
grep HT normal >/dev/null && grep HT normal >/dev/null &&
@ -85,9 +95,7 @@ test_expect_success 'without -space (attribute)' '
git config --unset core.whitespace git config --unset core.whitespace
echo "F whitespace=-space" >.gitattributes echo "F whitespace=-space" >.gitattributes
git diff --color >output prepare_output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
grep Eight normal >/dev/null && grep Eight normal >/dev/null &&
grep HT normal >/dev/null && grep HT normal >/dev/null &&
@ -101,9 +109,7 @@ test_expect_success 'with indent-non-tab only' '
rm -f .gitattributes rm -f .gitattributes
git config core.whitespace indent,-trailing,-space git config core.whitespace indent,-trailing,-space
git diff --color >output prepare_output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
grep Eight error >/dev/null && grep Eight error >/dev/null &&
grep HT normal >/dev/null && grep HT normal >/dev/null &&
@ -117,9 +123,7 @@ test_expect_success 'with indent-non-tab only (attribute)' '
git config --unset core.whitespace git config --unset core.whitespace
echo "F whitespace=indent,-trailing,-space" >.gitattributes echo "F whitespace=indent,-trailing,-space" >.gitattributes
git diff --color >output prepare_output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
grep Eight error >/dev/null && grep Eight error >/dev/null &&
grep HT normal >/dev/null && grep HT normal >/dev/null &&
@ -133,9 +137,7 @@ test_expect_success 'with cr-at-eol' '
rm -f .gitattributes rm -f .gitattributes
git config core.whitespace cr-at-eol git config core.whitespace cr-at-eol
git diff --color >output prepare_output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
grep Eight normal >/dev/null && grep Eight normal >/dev/null &&
grep HT error >/dev/null && grep HT error >/dev/null &&
@ -149,9 +151,7 @@ test_expect_success 'with cr-at-eol (attribute)' '
git config --unset core.whitespace git config --unset core.whitespace
echo "F whitespace=trailing,cr-at-eol" >.gitattributes echo "F whitespace=trailing,cr-at-eol" >.gitattributes
git diff --color >output prepare_output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
grep Eight normal >/dev/null && grep Eight normal >/dev/null &&
grep HT error >/dev/null && grep HT error >/dev/null &&
@ -195,7 +195,7 @@ test_expect_success 'color new trailing blank lines' '
git add x && git add x &&
{ echo a; echo; echo; echo; echo c; echo; echo; echo; echo; } >x && { echo a; echo; echo; echo; echo c; echo; echo; echo; echo; } >x &&
git diff --color x >output && git diff --color x >output &&
cnt=$(grep "${blue_grep}" output | wc -l) && cnt=$($grep_a "${blue_grep}" output | wc -l) &&
test $cnt = 2 test $cnt = 2
' '