Mercurial > hg
changeset 12675:c6cdc123f6e4
patch: fails immediately upon malformed hunk
patch(1) does silently ignore malformed hunks but this is not something we want
to copy.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Sat, 09 Oct 2010 15:13:08 -0500 |
parents | aa2fe1f52ff4 |
children | ef500b2f100b |
files | mercurial/patch.py tests/test-import.t |
diffstat | 2 files changed, 25 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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.