"diff --check" should affect exit status
[gitweb.git] / t / t4015-diff-whitespace.sh
index c945085245b4d41405f18b22c447c004c36cf132..dc538b3e33858623eff8a10d30a488194b58667d 100755 (executable)
@@ -17,7 +17,7 @@ do {
 } while (0);
 EOF
 
-git-update-index --add x
+git update-index --add x
 
 cat << EOF > x
 do
@@ -42,25 +42,25 @@ index adf3937..6edc172 100644
 +while (0);
 EOF
 
-git-diff > out
-test_expect_success "Ray's example without options" 'diff -u expect out'
+git diff > out
+test_expect_success "Ray's example without options" 'git diff expect out'
 
-git-diff -w > out
-test_expect_success "Ray's example with -w" 'diff -u expect out'
+git diff -w > out
+test_expect_success "Ray's example with -w" 'git diff expect out'
 
-git-diff -b > out
-test_expect_success "Ray's example with -b" 'diff -u expect out'
+git diff -b > out
+test_expect_success "Ray's example with -b" 'git diff expect out'
 
-cat << EOF > x
+tr 'Q' '\015' << EOF > x
 whitespace at beginning
 whitespace change
 whitespace in the middle
 whitespace at end
 unchanged line
-CR at end\r
+CR at endQ
 EOF
 
-git-update-index x
+git update-index x
 
 cat << EOF > x
        whitespace at beginning
@@ -71,7 +71,7 @@ unchanged line
 CR at end
 EOF
 
-cat << EOF > expect
+tr 'Q' '\015' << EOF > expect
 diff --git a/x b/x
 index d99af23..8b32fb5 100644
 --- a/x
@@ -86,20 +86,20 @@ index d99af23..8b32fb5 100644
 +white space in the middle
 +whitespace at end  
  unchanged line
--CR at end\r
+-CR at endQ
 +CR at end
 EOF
-git-diff > out
-test_expect_success 'another test, without options' 'diff -u expect out'
+git diff > out
+test_expect_success 'another test, without options' 'git diff expect out'
 
 cat << EOF > expect
 diff --git a/x b/x
 index d99af23..8b32fb5 100644
 EOF
-git-diff -w > out
-test_expect_success 'another test, with -w' 'diff -u expect out'
+git diff -w > out
+test_expect_success 'another test, with -w' 'git diff expect out'
 
-cat << EOF > expect
+tr 'Q' '\015' << EOF > expect
 diff --git a/x b/x
 index d99af23..8b32fb5 100644
 --- a/x
@@ -109,14 +109,156 @@ index d99af23..8b32fb5 100644
 +      whitespace at beginning
  whitespace change
 -whitespace in the middle
--whitespace at end
 +white space in the middle
-+whitespace at end  
+ whitespace at end
  unchanged line
--CR at end\r
-+CR at end
+ CR at endQ
 EOF
-git-diff -b > out
-test_expect_success 'another test, with -b' 'diff -u expect out'
+git diff -b > out
+test_expect_success 'another test, with -b' 'git diff expect out'
+
+test_expect_success 'check mixed spaces and tabs in indent' '
+
+       # This is indented with SP HT SP.
+       echo "   foo();" > x &&
+       git diff --check | grep "space before tab"
+
+'
+
+test_expect_success 'check with no whitespace errors' '
+
+       git commit -m "snapshot" &&
+       echo "foo();" > x &&
+       git diff --check
+
+'
+
+test_expect_failure 'check with trailing whitespace' '
+
+       echo "foo(); " > x &&
+       git diff --check
+
+'
+
+test_expect_failure 'check with space before tab in indent' '
+
+       # indent has space followed by hard tab
+       echo "  foo();" > x &&
+       git diff --check
+
+'
+
+test_expect_failure '--check and --exit-code are exclusive' '
+
+       git checkout x &&
+       git diff --check --exit-code
+
+'
+
+test_expect_failure '--check and --quiet are exclusive' '
+
+       git diff --check --quiet
+
+'
+
+test_expect_success 'check staged with no whitespace errors' '
+
+       echo "foo();" > x &&
+       git add x &&
+       git diff --cached --check
+
+'
+
+test_expect_failure 'check staged with trailing whitespace' '
+
+       echo "foo(); " > x &&
+       git add x &&
+       git diff --cached --check
+
+'
+
+test_expect_failure 'check staged with space before tab in indent' '
+
+       # indent has space followed by hard tab
+       echo "  foo();" > x &&
+       git add x &&
+       git diff --cached --check
+
+'
+
+test_expect_success 'check with no whitespace errors (diff-index)' '
+
+       echo "foo();" > x &&
+       git add x &&
+       git diff-index --check HEAD
+
+'
+
+test_expect_failure 'check with trailing whitespace (diff-index)' '
+
+       echo "foo(); " > x &&
+       git add x &&
+       git diff-index --check HEAD
+
+'
+
+test_expect_failure 'check with space before tab in indent (diff-index)' '
+
+       # indent has space followed by hard tab
+       echo "  foo();" > x &&
+       git add x &&
+       git diff-index --check HEAD
+
+'
+
+test_expect_success 'check staged with no whitespace errors (diff-index)' '
+
+       echo "foo();" > x &&
+       git add x &&
+       git diff-index --cached --check HEAD
+
+'
+
+test_expect_failure 'check staged with trailing whitespace (diff-index)' '
+
+       echo "foo(); " > x &&
+       git add x &&
+       git diff-index --cached --check HEAD
+
+'
+
+test_expect_failure 'check staged with space before tab in indent (diff-index)' '
+
+       # indent has space followed by hard tab
+       echo "  foo();" > x &&
+       git add x &&
+       git diff-index --cached --check HEAD
+
+'
+
+test_expect_success 'check with no whitespace errors (diff-tree)' '
+
+       echo "foo();" > x &&
+       git commit -m "new commit" x &&
+       git diff-tree --check HEAD^ HEAD
+
+'
+
+test_expect_failure 'check with trailing whitespace (diff-tree)' '
+
+       echo "foo(); " > x &&
+       git commit -m "another commit" x &&
+       git diff-tree --check HEAD^ HEAD
+
+'
+
+test_expect_failure 'check with space before tab in indent (diff-tree)' '
+
+       # indent has space followed by hard tab
+       echo "  foo();" > x &&
+       git commit -m "yet another" x &&
+       git diff-tree --check HEAD^ HEAD
+
+'
 
 test_done