# HG changeset patch # User David Wilhelm <d...@jumbledpile.com> # Date 1274799873 25200 # Node ID 898e42b5d07f240a24060ff48891b83c1ad56d41 # Parent 35821e37c0250337207875b391f8281b1917c87e shelve: show unshelve errors
diff --git a/tortoisehg/hgtk/thgshelve.py b/tortoisehg/hgtk/thgshelve.py --- a/tortoisehg/hgtk/thgshelve.py +++ b/tortoisehg/hgtk/thgshelve.py @@ -9,8 +9,9 @@ import os import gtk +from sys import stderr -from mercurial import util +from mercurial import util, patch from tortoisehg.util.i18n import _ from tortoisehg.util import hglib, hgshelve @@ -30,6 +31,7 @@ def init(self): GStatus.init(self) self.mode = 'shelve' + self.err_pos = 0 def parse_opts(self): GStatus.parse_opts(self) @@ -202,6 +204,13 @@ self.chunks.clear_filechunks() # do not keep chunks self.reload_status() + def get_stderr_text(self): + '''return the most recent lines from stderr''' + stderr.seek(self.err_pos) + outstr = ''.join(stderr.readlines()) + self.err_pos = stderr.tell() + return outstr + def unshelve(self): opts = {'addremove': None, 'include': [], 'force': None, 'append': None, 'exclude': [], 'inspect': None} @@ -211,8 +220,13 @@ self.ui.quiet = False self.reload_status() except Exception, e: - gdialog.Prompt(_('Unshelve Error'), - _('Error: %s') % e, self).run() + # get the file that caused the backup/patch error from stderr + if isinstance(e, (IOError, patch.PatchError)): + gdialog.Prompt(_('Unshelve Abort'), + self.get_stderr_text(), self).run() + else: + gdialog.Prompt(_('Unshelve Error'), + _('Error: %s') % e, self).run() def abandon(self): try: @@ -245,6 +259,7 @@ self.abandon() self.activate_shelve_buttons(True) + def run(_ui, *pats, **opts): cmdoptions = { 'user':opts.get('user', ''), 'date':opts.get('date', ''), diff --git a/tortoisehg/util/hgshelve.py b/tortoisehg/util/hgshelve.py --- a/tortoisehg/util/hgshelve.py +++ b/tortoisehg/util/hgshelve.py @@ -411,7 +411,11 @@ dir=dir) os.close(fd) ui.debug(_('backup %r as %r\n') % (f, tmpname)) - util.copyfile(repo.wjoin(f), tmpname) + try: + util.copyfile(repo.wjoin(f), tmpname) + except: + ui.warn(_('file copy of %s failed\n') % f) + raise backups[f] = tmpname return backups @@ -556,6 +560,9 @@ try: fp = cStringIO.StringIO() fp.write(repo.opener('shelve').read()) + except: + ui.warn(_('nothing to unshelve\n')) + else: if opts['inspect']: ui.status(fp.getvalue()) else: @@ -565,7 +572,11 @@ if isinstance(chunk, header): files += chunk.files() backupdir = repo.join('shelve-backups') - backups = makebackup(ui, repo, backupdir, set(files)) + try: + backups = makebackup(ui, repo, backupdir, set(files)) + except: + ui.warn(_('unshelve backup aborted\n')) + raise ui.debug(_('applying shelved patch\n')) patchdone = 0 @@ -596,8 +607,8 @@ ui.debug(_('removing shelved patches\n')) os.unlink(repo.join('shelve')) ui.status(_('unshelve completed\n')) - except IOError: - ui.warn(_('nothing to unshelve\n')) + else: + raise patch.PatchError def abandon(ui, repo): ------------------------------------------------------------------------------ _______________________________________________ Tortoisehg-develop mailing list Tortoisehg-develop@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop