Skip to content

Commit

Permalink
t4019 "grep" portability fix
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Dec 26, 2009
1 parent 15caa41 commit eca4460
Showing 1 changed file with 28 additions and 28 deletions.
56 changes: 28 additions & 28 deletions t/t4019-diff-wserror.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 &&
Expand All @@ -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 &&
Expand All @@ -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 &&
Expand All @@ -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 &&
Expand All @@ -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 &&
Expand All @@ -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 &&
Expand All @@ -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 &&
Expand All @@ -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 &&
Expand All @@ -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 &&
Expand Down Expand Up @@ -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
'

Expand Down

0 comments on commit eca4460

Please sign in to comment.