On Fri, May 21, 2010 at 12:44:04AM -0500, Steve Borho wrote:
> On Fri, May 21, 2010 at 12:24 AM, David Wilhelm <d...@jumbledpile.com> wrote:
> > Maybe everything should be in hgtk/thgshelve.py?
> 
> Nah, looks good.  I'll do a better review in the morning (~1am here)
> and most likely push it.

Works for me. Some warning strings are fixed in the attached patch.
# HG changeset patch
# User David Wilhelm <d...@jumbledpile.com>
# Date 1274416936 25200
# Node ID e4643204c1390a84999665c226668c00ca80dd01
# Parent  0fffba65b11d26de51bc3446d3e329bc359ad0c0
shelve: add 'abandon shelf contents'

Closes #700

diff --git a/tortoisehg/hgtk/thgshelve.py b/tortoisehg/hgtk/thgshelve.py
--- a/tortoisehg/hgtk/thgshelve.py
+++ b/tortoisehg/hgtk/thgshelve.py
@@ -72,6 +72,9 @@
                 self.shelve_clicked, tip=_('set aside selected changes'))
         self.unshelve_btn = self.make_toolbutton(gtk.STOCK_EDIT, _('Unshelve'),
                 self.unshelve_clicked, tip=_('restore shelved changes'))
+        self.abandon_btn = self.make_toolbutton(gtk.STOCK_CANCEL, _('Abandon'),
+                self.abandon_clicked, tip=_('abandon shelved changes'))
+        tbbuttons.insert(0, self.abandon_btn)
         tbbuttons.insert(0, self.unshelve_btn)
         tbbuttons.insert(0, self.shelve_btn)
         return tbbuttons
@@ -130,9 +133,11 @@
         if status:
             self.shelve_btn.set_sensitive(len(self.filemodel) > 0)
             self.unshelve_btn.set_sensitive(self.has_shelve_file())
+            self.abandon_btn.set_sensitive(self.has_shelve_file())
         else:
             self.shelve_btn.set_sensitive(False)
             self.unshelve_btn.set_sensitive(False)
+            self.abandon_btn.set_sensitive(False)
 
     def shelve_selected(self, files=[]):
         if len(self.filemodel) < 1:
@@ -209,6 +214,19 @@
             gdialog.Prompt(_('Unshelve Error'),
                     _('Error: %s') % e, self).run()
 
+    def abandon(self):
+        try:
+            response = gdialog.Confirm(_('Confirm Delete'), [], self,
+                                       _('Delete the shelf contents?')).run()
+            if response == gtk.RESPONSE_YES:
+                self.ui.quiet = True
+                hgshelve.abandon(self.ui, self.repo)
+                self.ui.quiet = False
+            self.reload_status()
+        except Exception, e:
+            gdialog.Prompt(_('Abandon Error'),
+                    _('Error: %s') % e, self).run()
+
     def shelve_clicked(self, toolbutton, data=None):
         if not self.isuptodate():
             return
@@ -221,6 +239,12 @@
         self.unshelve()
         self.activate_shelve_buttons(True)
 
+    def abandon_clicked(self, toolbutton, data=None):
+        if not self.isuptodate():
+            return
+        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
@@ -598,6 +598,20 @@
     except IOError:
         ui.warn(_('nothing to unshelve\n'))
 
+
+def abandon(ui, repo):
+    '''abandon shelved changes'''
+    try:
+        if os.path.exists(repo.join('shelve')):
+            ui.debug(_('abandoning shelved file\n'))
+            os.unlink(repo.join('shelve'))
+            ui.status(_('shelved file abandoned\n'))
+        else:
+            ui.warn(_('nothing to abandon\n'))
+    except IOError:
+        ui.warn(_('abandon failed\n'))
+
+
 cmdtable = {
     "shelve":
         (shelve,
------------------------------------------------------------------------------

_______________________________________________
Tortoisehg-develop mailing list
Tortoisehg-develop@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop

Reply via email to