Merge branch 'cb/leading-path-removal'
[gitweb.git] / t / t4019-diff-wserror.sh
index 3a3663fbcb4795a9e3755fe831c89a7e312f659e..3fa836f9d3c19f351ce5451049eb191776cbd4a5 100755 (executable)
@@ -20,11 +20,28 @@ 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
+       return 0
+}
+
 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 &&
@@ -36,10 +53,8 @@ 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
+       git config core.whitespace -trail &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT error >/dev/null &&
@@ -51,11 +66,9 @@ test_expect_success 'without -trail' '
 
 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
+       test_might_fail git config --unset core.whitespace &&
+       echo "F whitespace=-trail" >.gitattributes &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT error >/dev/null &&
@@ -67,11 +80,9 @@ test_expect_success 'without -trail (attribute)' '
 
 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
+       rm -f .gitattributes &&
+       git config core.whitespace -space &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT normal >/dev/null &&
@@ -83,11 +94,9 @@ test_expect_success 'without -space' '
 
 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
+       test_might_fail git config --unset core.whitespace &&
+       echo "F whitespace=-space" >.gitattributes &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT normal >/dev/null &&
@@ -99,11 +108,9 @@ test_expect_success 'without -space (attribute)' '
 
 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
+       rm -f .gitattributes &&
+       git config core.whitespace indent,-trailing,-space &&
+       prepare_output &&
 
        grep Eight error >/dev/null &&
        grep HT normal >/dev/null &&
@@ -115,11 +122,9 @@ test_expect_success 'with indent-non-tab only' '
 
 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
+       test_might_fail git config --unset core.whitespace &&
+       echo "F whitespace=indent,-trailing,-space" >.gitattributes &&
+       prepare_output &&
 
        grep Eight error >/dev/null &&
        grep HT normal >/dev/null &&
@@ -131,11 +136,9 @@ test_expect_success 'with indent-non-tab only (attribute)' '
 
 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
+       rm -f .gitattributes &&
+       git config core.whitespace cr-at-eol &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT error >/dev/null &&
@@ -147,11 +150,9 @@ test_expect_success 'with cr-at-eol' '
 
 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
+       test_might_fail git config --unset core.whitespace &&
+       echo "F whitespace=trailing,cr-at-eol" >.gitattributes &&
+       prepare_output &&
 
        grep Eight normal >/dev/null &&
        grep HT error >/dev/null &&
@@ -178,12 +179,21 @@ test_expect_success 'trailing empty lines (2)' '
 
 '
 
+test_expect_success 'checkdiff shows correct line number for trailing blank lines' '
+
+       printf "a\nb\n" > G &&
+       git add G &&
+       printf "x\nx\nx\na\nb\nc\n\n" > G &&
+       [ "$(git diff --check -- G)" = "G:7: new blank line at EOF." ]
+
+'
+
 test_expect_success 'do not color trailing cr in context' '
-       git config --unset core.whitespace
+       test_might_fail git config --unset core.whitespace &&
        rm -f .gitattributes &&
        echo AAAQ | tr Q "\015" >G &&
        git add G &&
-       echo BBBQ | tr Q "\015" >>G
+       echo BBBQ | tr Q "\015" >>G &&
        git diff --color G | tr "\015" Q >output &&
        grep "BBB.*${blue_grep}Q" output &&
        grep "AAA.*\[mQ" output
@@ -195,7 +205,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
 '