[BUG] diff --word-diff inconsistently places removed words

Subsystems: the rest

2 messages, 1 author, 2016-06-15 · open the first message on its own page

[BUG] diff --word-diff inconsistently places removed words

From: Lucian Poston <hidden>
Date: 2016-06-15 23:07:04

In the output generated by diff --word-diff, if the first word of a line was
removed, it may appear at the end of the previous line. For example, compare
the following two diffs on the same files, the first diff without --word-diff
and the second with it.


$ git diff
diff --git a/smallest-test b/smallest-test
index bc5f07a..d9116b1 100644
--- a/smallest-test
+++ b/smallest-test
@@ -1,7 +1,7 @@
 
-111 aaa
-111 aaa
+ aaa
+ aaa
 
 111 aaa
-111 aaa
+ aaa
 

$ git diff --word-diff=plain
diff --git a/smallest-test b/smallest-test
index bc5f07a..d9116b1 100644
--- a/smallest-test
+++ b/smallest-test
@@ -1,7 +1,7 @@
[-111-] aaa[-111-]
 aaa

111 aaa
[-111-] aaa


I would expect every [-111-] to be on the line where it was removed. Instead
it appears on the previous line in the case where the previous line also has a
removal.

Is this expected behavior?

There is also a patch in this email thread that contains a test to further
illustrate the issue. Running the test fails with the following diff between
the expected result and actual result.
--- expect	2015-10-27 01:08:05.415252713 +0000
+++ output.decrypted	2015-10-27 01:08:05.418252766 +0000
@@ -6,5 +6,5 @@
 11aa<RESET>
 <RED>11<RESET>aa
 
-<RED>11<RESET>aa
-<RED>11<RESET>aa
+<RED>11<RESET>aa<RED>11<RESET>
+aa

Lucian Poston (1):
  t4034: Test parsing words following newline

 t/t4034-diff-words.sh | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

-- 
2.4.10

[PATCH] t4034: Test parsing words following newline

From: Lucian Poston <hidden>
Date: 2016-06-15 23:07:04

Add test that shows diff --word-diff's inconsistent placement of removed
words. This occurs when both the removed word is first on its line and the
previous line has a removed word.

Signed-off-by: Lucian Poston <redacted>
---
 t/t4034-diff-words.sh | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)
diff --git a/t/t4034-diff-words.sh b/t/t4034-diff-words.sh
index f2f55fc..8d9f1b7 100755
--- a/t/t4034-diff-words.sh
+++ b/t/t4034-diff-words.sh
@@ -265,6 +265,36 @@ test_expect_success 'test parsing words for newline' '
 	word_diff --color-words="a+"
 '
 
+test_expect_success 'test parsing words following newline' '
+	cat >pre <<-\EOF &&
+		11aa
+		11aa
+		
+		11aa
+		11aa
+	EOF
+	cat >post <<-\EOF &&
+		11aa
+		aa
+		
+		aa
+		aa
+	EOF
+	cat >expect <<-\EOF &&
+		<BOLD>diff --git a/pre b/post<RESET>
+		<BOLD>index 2e0acd4..f6e6721 100644<RESET>
+		<BOLD>--- a/pre<RESET>
+		<BOLD>+++ b/post<RESET>
+		<CYAN>@@ -1,5 +1,5 @@<RESET>
+		11aa<RESET>
+		<RED>11<RESET>aa
+		
+		<RED>11<RESET>aa
+		<RED>11<RESET>aa
+	EOF
+	word_diff --color-words="a+|1+"
+'
+
 test_expect_success 'test when words are only removed at the end' '
 	echo "(:" >pre &&
 	echo "(" >post &&
-- 
2.4.10
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help