patch: fails immediately upon malformed hunk
patch(1) does silently ignore malformed hunks but this is not something we want
to copy.
--- a/mercurial/patch.py Sat Oct 09 15:13:08 2010 -0500
+++ b/mercurial/patch.py Sat Oct 09 15:13:08 2010 -0500
@@ -1007,17 +1007,12 @@
current_hunk = None
if ((sourcefile or state == BFILE) and ((not context and x[0] == '@') or
((context is not False) and x.startswith('***************')))):
- try:
- if context is None and x.startswith('***************'):
- context = True
- gpatch = changed.get(bfile)
- create = afile == '/dev/null' or gpatch and gpatch.op == 'ADD'
- remove = bfile == '/dev/null' or gpatch and gpatch.op == 'DELETE'
- current_hunk = hunk(x, hunknum + 1, lr, context, create, remove)
- except PatchError, err:
- ui.debug(err)
- current_hunk = None
- continue
+ if context is None and x.startswith('***************'):
+ context = True
+ gpatch = changed.get(bfile)
+ create = afile == '/dev/null' or gpatch and gpatch.op == 'ADD'
+ remove = bfile == '/dev/null' or gpatch and gpatch.op == 'DELETE'
+ current_hunk = hunk(x, hunknum + 1, lr, context, create, remove)
hunknum += 1
if emitfile:
emitfile = False
--- a/tests/test-import.t Sat Oct 09 15:13:08 2010 -0500
+++ b/tests/test-import.t Sat Oct 09 15:13:08 2010 -0500
@@ -150,6 +150,25 @@
$ rm -r b
+import of malformed plain diff should fail
+
+ $ hg clone -r0 a b
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 2 changes to 2 files
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg --cwd a diff -r0:1 > tip.patch
+ $ sed 's/1,1/foo/' < tip.patch > broken.patch
+ $ hg --cwd b import -mpatch ../broken.patch
+ applying ../broken.patch
+ abort: bad hunk #1
+ [255]
+ $ rm -r b
+
+
hg -R repo import
put the clone in a subdir - having a directory named "a"
used to hide a bug.