# HG changeset patch # User Peter Arrenbrecht # Date 1270838045 -7200 # Node ID 196908117c274aa1604cc5afcfd93ca8c8359b52 # Parent c63a6ddbbf9a5672aab09095af954f935abdb75b 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. diff -r c63a6ddbbf9a -r 196908117c27 mercurial/patch.py --- 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] diff -r c63a6ddbbf9a -r 196908117c27 tests/test-import --- 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 .. + diff -r c63a6ddbbf9a -r 196908117c27 tests/test-import.out --- 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