# HG changeset patch # User David Wilhelm <d...@jumbledpile.com> # Date 1274950836 25200 # Node ID e9b3f33388e8a8565fb53b431fa526c36d274987 # 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 @@ -10,7 +10,7 @@ import os import gtk -from mercurial import util +from mercurial import util, patch, ui from tortoisehg.util.i18n import _ from tortoisehg.util import hglib, hgshelve @@ -30,6 +30,7 @@ def init(self): GStatus.init(self) self.mode = 'shelve' + self.ui = ErrBufUI(self.ui) def parse_opts(self): GStatus.parse_opts(self) @@ -206,13 +207,17 @@ opts = {'addremove': None, 'include': [], 'force': None, 'append': None, 'exclude': [], 'inspect': None} try: + self.ui.errorq = [] self.ui.quiet = True hgshelve.unshelve(self.ui, self.repo, **opts) self.ui.quiet = False self.reload_status() + except (util.Abort, IOError, patch.PatchError), e: + gdialog.Prompt(_('Unshelve Abort'), + ''.join(self.ui.errorq), self).run() except Exception, e: gdialog.Prompt(_('Unshelve Error'), - _('Error: %s') % e, self).run() + _('Error: %s') % e, self).run() def abandon(self): try: @@ -245,6 +250,22 @@ self.abandon() self.activate_shelve_buttons(True) + +class ErrBufUI(ui.ui): + """ui subclass to save hg and thg errors""" + + def __init__(self, src=None, errorq=[]): + ui.ui.__init__(self, src) + if src and hasattr(src, 'errorq'): + self.errorq = src.errorq + else: + self.errorq = errorq + + def warn(self, *msg, **opts): + self.errorq.extend(msg) + ui.ui.warn(self, *msg, **opts) + + 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