# HG changeset patch
# User David Wilhelm <[email protected]>
# 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop