Browse Source

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>
maint
Junio C Hamano 15 years ago
parent
commit
eca4460eeb
  1. 56
      t/t4019-diff-wserror.sh

56
t/t4019-diff-wserror.sh

@ -20,11 +20,27 @@ test_expect_success setup ' @@ -20,11 +20,27 @@ test_expect_success setup '

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 '

git diff --color >output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
prepare_output

grep Eight normal >/dev/null &&
grep HT error >/dev/null &&
@ -37,9 +53,7 @@ test_expect_success default ' @@ -37,9 +53,7 @@ test_expect_success default '
test_expect_success 'without -trail' '

git config core.whitespace -trail
git diff --color >output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
prepare_output

grep Eight normal >/dev/null &&
grep HT error >/dev/null &&
@ -53,9 +67,7 @@ test_expect_success 'without -trail (attribute)' ' @@ -53,9 +67,7 @@ test_expect_success 'without -trail (attribute)' '

git config --unset core.whitespace
echo "F whitespace=-trail" >.gitattributes
git diff --color >output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
prepare_output

grep Eight normal >/dev/null &&
grep HT error >/dev/null &&
@ -69,9 +81,7 @@ test_expect_success 'without -space' ' @@ -69,9 +81,7 @@ test_expect_success 'without -space' '

rm -f .gitattributes
git config core.whitespace -space
git diff --color >output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
prepare_output

grep Eight normal >/dev/null &&
grep HT normal >/dev/null &&
@ -85,9 +95,7 @@ test_expect_success 'without -space (attribute)' ' @@ -85,9 +95,7 @@ test_expect_success 'without -space (attribute)' '

git config --unset core.whitespace
echo "F whitespace=-space" >.gitattributes
git diff --color >output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
prepare_output

grep Eight normal >/dev/null &&
grep HT normal >/dev/null &&
@ -101,9 +109,7 @@ test_expect_success 'with indent-non-tab only' ' @@ -101,9 +109,7 @@ test_expect_success 'with indent-non-tab only' '

rm -f .gitattributes
git config core.whitespace indent,-trailing,-space
git diff --color >output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
prepare_output

grep Eight error >/dev/null &&
grep HT normal >/dev/null &&
@ -117,9 +123,7 @@ test_expect_success 'with indent-non-tab only (attribute)' ' @@ -117,9 +123,7 @@ test_expect_success 'with indent-non-tab only (attribute)' '

git config --unset core.whitespace
echo "F whitespace=indent,-trailing,-space" >.gitattributes
git diff --color >output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
prepare_output

grep Eight error >/dev/null &&
grep HT normal >/dev/null &&
@ -133,9 +137,7 @@ test_expect_success 'with cr-at-eol' ' @@ -133,9 +137,7 @@ test_expect_success 'with cr-at-eol' '

rm -f .gitattributes
git config core.whitespace cr-at-eol
git diff --color >output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
prepare_output

grep Eight normal >/dev/null &&
grep HT error >/dev/null &&
@ -149,9 +151,7 @@ test_expect_success 'with cr-at-eol (attribute)' ' @@ -149,9 +151,7 @@ test_expect_success 'with cr-at-eol (attribute)' '

git config --unset core.whitespace
echo "F whitespace=trailing,cr-at-eol" >.gitattributes
git diff --color >output
grep "$blue_grep" output >error
grep -v "$blue_grep" output >normal
prepare_output

grep Eight normal >/dev/null &&
grep HT error >/dev/null &&
@ -195,7 +195,7 @@ test_expect_success 'color new trailing blank lines' ' @@ -195,7 +195,7 @@ test_expect_success 'color new trailing blank lines' '
git add x &&
{ echo a; echo; echo; echo; echo c; echo; echo; echo; echo; } >x &&
git diff --color x >output &&
cnt=$(grep "${blue_grep}" output | wc -l) &&
cnt=$($grep_a "${blue_grep}" output | wc -l) &&
test $cnt = 2
'


Loading…
Cancel
Save