# HG changeset patch # User Patrick Mezard # Date 1286655188 18000 # Node ID c6cdc123f6e4da831ca577044f5b5aefdad929f1 # Parent aa2fe1f52ff4090bac7a5a950d48e80e3106af8e patch: fails immediately upon malformed hunk patch(1) does silently ignore malformed hunks but this is not something we want to copy. diff -r aa2fe1f52ff4 -r c6cdc123f6e4 mercurial/patch.py --- 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 diff -r aa2fe1f52ff4 -r c6cdc123f6e4 tests/test-import.t --- 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.