patch: don't look for headers in diff lines stable
authorPeter Arrenbrecht <peter.arrenbrecht@gmail.com>
Fri, 09 Apr 2010 20:34:05 +0200
branchstable
changeset 10883 196908117c27
parent 10878 c63a6ddbbf9a
child 10884 4fb1bafd43e7
child 10885 9e4d120e3c32
patch: don't look for headers in diff lines If you have a diff line that matches a header line, the patch splitter currently breaks your patch at this line. For example a line like: +key: value This can lead to "malformed patch" exceptions. Now fixed.
mercurial/patch.py
tests/test-import
tests/test-import.out
--- a/mercurial/patch.py	Fri Apr 09 15:14:43 2010 +0200
+++ b/mercurial/patch.py	Fri Apr 09 20:34:05 2010 +0200
@@ -47,6 +47,9 @@
         if inheader and line[0] in (' ', '\t'):
             # continuation
             return True
+        if line[0] in (' ', '-', '+'):
+            # diff line - don't check for header pattern in there
+            return False
         l = line.split(': ', 1)
         return len(l) == 2 and ' ' not in l[0]
 
--- a/tests/test-import	Fri Apr 09 15:14:43 2010 +0200
+++ b/tests/test-import	Fri Apr 09 20:34:05 2010 +0200
@@ -474,3 +474,24 @@
 hg sum
 hg diff --git -c tip
 cd ..
+
+echo '% diff lines looking like headers'
+hg init difflineslikeheaders
+cd difflineslikeheaders
+echo a >a
+echo b >b
+echo c >c
+hg ci -Am1
+
+echo "key: value" >>a
+echo "key: value" >>b
+echo "foo" >>c
+hg ci -m2
+
+hg up -C 0
+hg diff --git -c1 >want
+hg diff -c1 | hg import --no-commit -
+hg diff --git >have
+diff want have
+cd ..
+
--- a/tests/test-import.out	Fri Apr 09 15:14:43 2010 +0200
+++ b/tests/test-import.out	Fri Apr 09 20:34:05 2010 +0200
@@ -373,3 +373,9 @@
 diff --git a/src/cmd/gc/mksys.bash b/src/cmd/gc/mksys.bash
 old mode 100644
 new mode 100755
+% diff lines looking like headers
+adding a
+adding b
+adding c
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+applying patch from stdin