/tortoisehg/hgtk/p4pending.py
https://bitbucket.org/tortoisehg/hgtk/ · Python · 115 lines · 84 code · 21 blank · 10 comment · 11 complexity · 7a8ce553f1e46e5b3b266c4d7969f472 MD5 · raw file
- # p4pending.py - Display pending p4 changelists, created by perfarce extension
- #
- # Copyright 2010 Steve Borho <steve@borho.org>
- #
- # This software may be used and distributed according to the terms of the
- # GNU General Public License version 2, incorporated herein by reference.
- import os
- import gtk
- import gobject
- from mercurial import error
- from tortoisehg.util.i18n import _
- from tortoisehg.hgtk import gtklib, gdialog, cslist
- class PerforcePending(gdialog.GDialog):
- 'Dialog for selecting a revision'
- def __init__(self, repo, pending, graphview):
- gdialog.GDialog.__init__(self, resizable=True)
- self.repo = repo
- self.graphview = graphview
- self.pending = pending
- def get_icon(self):
- return 'menulog.ico'
- def get_title(self, reponame):
- return _('Pending Perforce Changelists - %s') % reponame
- def get_defsize(self):
- return (500, 380)
- def get_body(self, vbox):
- # layout table
- self.table = table = gtklib.LayoutTable()
- vbox.pack_start(table, True, True, 2)
- ## changelist combo
- clcombo = gtk.combo_box_new_text()
- clcombo.connect('changed', self.changelist_selected)
- table.add_row(_('Changelist:'), clcombo)
- ## changeset list
- self.cslist = cslist.ChangesetList()
- self.cslist.set_activatable_enable(True)
- self.cslist.connect('item-activated', self.item_activated)
- table.add_row(None, self.cslist, padding=False,
- yopt=gtk.FILL|gtk.EXPAND)
- ### fill combo list
- for changelist in self.pending:
- clcombo.append_text(changelist)
- clcombo.set_active(0)
- def item_activated(self, cslist, hash, *args):
- try:
- rev = self.repo[hash].rev()
- except error.LookupError:
- return
- if self.graphview:
- self.graphview.set_revision_id(rev)
- def get_buttons(self):
- return [('submit', _('Submit'), gtk.RESPONSE_OK),
- ('revert', _('Revert'), gtk.RESPONSE_CANCEL),
- ('close', gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)]
- def get_default_button(self):
- return 'submit'
- def get_action_map(self):
- return {gtk.RESPONSE_OK: self.submit,
- gtk.RESPONSE_CANCEL: self.revert}
- def changelist_selected(self, combo):
- 'User has selected a changelist, fill cslist'
- curcl = combo.get_active_text()
- try:
- revs = [self.repo[hash] for hash in self.pending[curcl]]
- except error.Abort, e:
- revs = []
- self.cslist.clear()
- self.cslist.update(revs, self.repo)
- sensitive = not curcl.endswith('(submitted)')
- self.buttons['submit'].set_property('sensitive', sensitive)
- self.buttons['revert'].set_property('sensitive', sensitive)
- self.curcl = curcl
- def switch_to(self, normal, working, cmd):
- self.table.set_sensitive(normal)
- self.buttons['submit'].set_property('visible', normal)
- self.buttons['revert'].set_property('visible', normal)
- self.buttons['close'].set_property('visible', normal)
- if normal:
- self.buttons['close'].grab_focus()
- def command_done(self, returncode, useraborted, *args):
- if returncode == 0:
- self.cmd.set_result(_('Finished'), style='ok')
- elif useraborted:
- self.cmd.set_result(_('Canceled'), style='error')
- else:
- self.cmd.set_result(_('Failed'), style='error')
- def submit(self):
- assert(self.curcl.endswith('(pending)'))
- cmdline = ['hg', 'p4submit', '--verbose', self.curcl[:-10]]
- self.execute_command(cmdline)
- def revert(self):
- assert(self.curcl.endswith('(pending)'))
- cmdline = ['hg', 'p4revert', '--verbose', self.curcl[:-10]]
- self.execute_command(cmdline)