Mercurial > hg
changeset 3465:2d35a8d2b32d
patch: return list of modified files even when an exception is raised
The file list is passed in as an argument and updated in place.
This fixes issue399.
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Wed, 18 Oct 2006 10:37:34 -0700 |
parents | ba3a96750de0 |
children | 8b55c0ba8048 |
files | hgext/mq.py mercurial/commands.py mercurial/patch.py |
diffstat | 3 files changed, 17 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/mq.py Wed Oct 18 10:37:34 2006 -0700 +++ b/hgext/mq.py Wed Oct 18 10:37:34 2006 -0700 @@ -408,14 +408,15 @@ def patch(self, repo, patchfile): '''Apply patchfile to the working directory. patchfile: file name of patch''' + files = {} try: - (files, fuzz) = patch.patch(patchfile, self.ui, strip=1, - cwd=repo.root) + fuzz = patch.patch(patchfile, self.ui, strip=1, cwd=repo.root, + files=files) except Exception, inst: self.ui.note(str(inst) + '\n') if not self.ui.verbose: self.ui.warn("patch failed, unable to continue (try -v)\n") - return (False, [], False) + return (False, files, False) return (True, files, fuzz)
--- a/mercurial/commands.py Wed Oct 18 10:37:34 2006 -0700 +++ b/mercurial/commands.py Wed Oct 18 10:37:34 2006 -0700 @@ -1656,8 +1656,12 @@ message = None ui.debug(_('message:\n%s\n') % message) - files, fuzz = patch.patch(tmpname, ui, strip=strip, cwd=repo.root) - files = patch.updatedir(ui, repo, files, wlock=wlock) + files = {} + try: + fuzz = patch.patch(tmpname, ui, strip=strip, cwd=repo.root, + files=files) + finally: + files = patch.updatedir(ui, repo, files, wlock=wlock) repo.commit(files, message, user, date, wlock=wlock, lock=lock) finally: os.unlink(tmpname)
--- a/mercurial/patch.py Wed Oct 18 10:37:34 2006 -0700 +++ b/mercurial/patch.py Wed Oct 18 10:37:34 2006 -0700 @@ -266,14 +266,13 @@ tmpfp.close() return patchname -def patch(patchname, ui, strip=1, cwd=None): +def patch(patchname, ui, strip=1, cwd=None, files={}): """apply the patch <patchname> to the working directory. a list of patched files is returned""" # helper function def __patch(patchname): """patch and updates the files and fuzz variables""" - files = {} fuzz = False patcher = util.find_in_path('gpatch', os.environ.get('PATH', ''), @@ -308,25 +307,24 @@ if code: raise util.Abort(_("patch command failed: %s") % util.explain_exit(code)[0]) - return files, fuzz + return fuzz (dopatch, gitpatches) = readgitpatch(patchname) + for gp in gitpatches: + files[gp.path] = (gp.op, gp) - files, fuzz = {}, False + fuzz = False if dopatch: if dopatch in ('filter', 'binary'): patchname = dogitpatch(patchname, gitpatches, cwd=cwd) try: if dopatch != 'binary': - files, fuzz = __patch(patchname) + fuzz = __patch(patchname) finally: if dopatch == 'filter': os.unlink(patchname) - for gp in gitpatches: - files[gp.path] = (gp.op, gp) - - return (files, fuzz) + return fuzz def diffopts(ui, opts={}): return mdiff.diffopts(