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