Browse Source
When whitespace or whitespace change was ignored, the function xdl_recmatch() returned memcmp() style differences, which is wrong, since it should return 0 on non-match. Also, there were three horrible off-by-one bugs, even leading to wrong hashes in the whitespace special handling. The issue was noticed by Ray Lehtiniemi. For good measure, this commit adds a test. Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
Johannes Schindelin
18 years ago
committed by
Junio C Hamano
2 changed files with 134 additions and 17 deletions
@ -0,0 +1,122 @@ |
|||||||
|
#!/bin/sh |
||||||
|
# |
||||||
|
# Copyright (c) 2006 Johannes E. Schindelin |
||||||
|
# |
||||||
|
|
||||||
|
test_description='Test special whitespace in diff engine. |
||||||
|
|
||||||
|
' |
||||||
|
. ./test-lib.sh |
||||||
|
. ../diff-lib.sh |
||||||
|
|
||||||
|
# Ray Lehtiniemi's example |
||||||
|
|
||||||
|
cat << EOF > x |
||||||
|
do { |
||||||
|
nothing; |
||||||
|
} while (0); |
||||||
|
EOF |
||||||
|
|
||||||
|
git-update-index --add x |
||||||
|
|
||||||
|
cat << EOF > x |
||||||
|
do |
||||||
|
{ |
||||||
|
nothing; |
||||||
|
} |
||||||
|
while (0); |
||||||
|
EOF |
||||||
|
|
||||||
|
cat << EOF > expect |
||||||
|
diff --git a/x b/x |
||||||
|
index adf3937..6edc172 100644 |
||||||
|
--- a/x |
||||||
|
+++ b/x |
||||||
|
@@ -1,3 +1,5 @@ |
||||||
|
-do { |
||||||
|
+do |
||||||
|
+{ |
||||||
|
nothing; |
||||||
|
-} while (0); |
||||||
|
+} |
||||||
|
+while (0); |
||||||
|
EOF |
||||||
|
|
||||||
|
git-diff > out |
||||||
|
test_expect_success "Ray's example without options" 'diff -u expect out' |
||||||
|
|
||||||
|
git-diff -w > out |
||||||
|
test_expect_success "Ray's example with -w" 'diff -u expect out' |
||||||
|
|
||||||
|
git-diff -b > out |
||||||
|
test_expect_success "Ray's example with -b" 'diff -u expect out' |
||||||
|
|
||||||
|
cat << EOF > x |
||||||
|
whitespace at beginning |
||||||
|
whitespace change |
||||||
|
whitespace in the middle |
||||||
|
whitespace at end |
||||||
|
unchanged line |
||||||
|
CR at end |
||||||
|
EOF |
||||||
|
|
||||||
|
git-update-index x |
||||||
|
|
||||||
|
cat << EOF > x |
||||||
|
whitespace at beginning |
||||||
|
whitespace change |
||||||
|
white space in the middle |
||||||
|
whitespace at end |
||||||
|
unchanged line |
||||||
|
CR at end |
||||||
|
EOF |
||||||
|
|
||||||
|
cat << EOF > expect |
||||||
|
diff --git a/x b/x |
||||||
|
index d99af23..8b32fb5 100644 |
||||||
|
--- a/x |
||||||
|
+++ b/x |
||||||
|
@@ -1,6 +1,6 @@ |
||||||
|
-whitespace at beginning |
||||||
|
-whitespace change |
||||||
|
-whitespace in the middle |
||||||
|
-whitespace at end |
||||||
|
+ whitespace at beginning |
||||||
|
+whitespace change |
||||||
|
+white space in the middle |
||||||
|
+whitespace at end |
||||||
|
unchanged line |
||||||
|
-CR at end |
||||||
|
+CR at end |
||||||
|
EOF |
||||||
|
git-diff > out |
||||||
|
test_expect_success 'another test, without options' 'diff -u 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' |
||||||
|
|
||||||
|
cat << EOF > expect |
||||||
|
diff --git a/x b/x |
||||||
|
index d99af23..8b32fb5 100644 |
||||||
|
--- a/x |
||||||
|
+++ b/x |
||||||
|
@@ -1,6 +1,6 @@ |
||||||
|
-whitespace at beginning |
||||||
|
+ whitespace at beginning |
||||||
|
whitespace change |
||||||
|
-whitespace in the middle |
||||||
|
-whitespace at end |
||||||
|
+white space in the middle |
||||||
|
+whitespace at end |
||||||
|
unchanged line |
||||||
|
-CR at end |
||||||
|
+CR at end |
||||||
|
EOF |
||||||
|
git-diff -b > out |
||||||
|
test_expect_success 'another test, with -b' 'diff -u expect out' |
||||||
|
|
||||||
|
test_done |
Loading…
Reference in new issue