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