mdiff: carriage return (\r) is also ignorable whitespace
authorMads Kiilerich <mads@kiilerich.com>
Tue, 19 Oct 2010 03:55:06 +0200
changeset 12751 8eb758ea738c
parent 12750 05bd2658bbb3
child 12752 18b5b6392fcf
mdiff: carriage return (\r) is also ignorable whitespace
mercurial/mdiff.py
tests/test-diff-ignore-whitespace.t
--- a/mercurial/mdiff.py	Fri Oct 15 23:00:45 2010 -0500
+++ b/mercurial/mdiff.py	Tue Oct 19 03:55:06 2010 +0200
@@ -67,10 +67,10 @@
 
 def wsclean(opts, text, blank=True):
     if opts.ignorews:
-        text = re.sub('[ \t]+', '', text)
+        text = re.sub('[ \t\r]+', '', text)
     elif opts.ignorewsamount:
-        text = re.sub('[ \t]+', ' ', text)
-        text = re.sub('[ \t]+\n', '\n', text)
+        text = re.sub('[ \t\r]+', ' ', text)
+        text = text.replace(' \n', '\n')
     if blank and opts.ignoreblanklines:
         text = re.sub('\n+', '', text)
     return text
--- a/tests/test-diff-ignore-whitespace.t	Fri Oct 15 23:00:45 2010 -0500
+++ b/tests/test-diff-ignore-whitespace.t	Tue Oct 19 03:55:06 2010 +0200
@@ -390,3 +390,57 @@
 
   $ hg ndiff -wB
 
+
+Test \r (carriage return) as used in "DOS" line endings:
+
+  $ printf 'hello world\r\n\r\ngoodbye\rworld\n' >foo
+
+  $ hg ndiff
+  diff -r 540c40a65b78 foo
+  --- a/foo
+  +++ b/foo
+  @@ -1,2 +1,3 @@
+  -hello world
+  -goodbye world
+  +hello world
+  +
+  +goodbye
world
+world
+
+No completely blank lines to ignore:
+
+  $ hg ndiff --ignore-blank-lines
+  diff -r 540c40a65b78 foo
+  --- a/foo
+  +++ b/foo
+  @@ -1,2 +1,3 @@
+  -hello world
+  -goodbye world
+  +hello world
+  +
+  +goodbye
world
+world
+
+Only new line noticed:
+
+  $ hg ndiff --ignore-space-change
+  diff -r 540c40a65b78 foo
+  --- a/foo
+  +++ b/foo
+  @@ -1,2 +1,3 @@
+   hello world
+  +
+   goodbye world
+
+  $ hg ndiff --ignore-all-space
+  diff -r 540c40a65b78 foo
+  --- a/foo
+  +++ b/foo
+  @@ -1,2 +1,3 @@
+   hello world
+  +
+   goodbye world
+
+New line not noticed when space change ignored:
+
+  $ hg ndiff --ignore-blank-lines --ignore-all-space