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 @@
@@ -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