/tortoisehg/hgtk/p4pending.py

https://bitbucket.org/tortoisehg/hgtk/ · Python · 115 lines · 84 code · 21 blank · 10 comment · 11 complexity · 7a8ce553f1e46e5b3b266c4d7969f472 MD5 · raw file

  1. # p4pending.py - Display pending p4 changelists, created by perfarce extension
  2. #
  3. # Copyright 2010 Steve Borho <steve@borho.org>
  4. #
  5. # This software may be used and distributed according to the terms of the
  6. # GNU General Public License version 2, incorporated herein by reference.
  7. import os
  8. import gtk
  9. import gobject
  10. from mercurial import error
  11. from tortoisehg.util.i18n import _
  12. from tortoisehg.hgtk import gtklib, gdialog, cslist
  13. class PerforcePending(gdialog.GDialog):
  14. 'Dialog for selecting a revision'
  15. def __init__(self, repo, pending, graphview):
  16. gdialog.GDialog.__init__(self, resizable=True)
  17. self.repo = repo
  18. self.graphview = graphview
  19. self.pending = pending
  20. def get_icon(self):
  21. return 'menulog.ico'
  22. def get_title(self, reponame):
  23. return _('Pending Perforce Changelists - %s') % reponame
  24. def get_defsize(self):
  25. return (500, 380)
  26. def get_body(self, vbox):
  27. # layout table
  28. self.table = table = gtklib.LayoutTable()
  29. vbox.pack_start(table, True, True, 2)
  30. ## changelist combo
  31. clcombo = gtk.combo_box_new_text()
  32. clcombo.connect('changed', self.changelist_selected)
  33. table.add_row(_('Changelist:'), clcombo)
  34. ## changeset list
  35. self.cslist = cslist.ChangesetList()
  36. self.cslist.set_activatable_enable(True)
  37. self.cslist.connect('item-activated', self.item_activated)
  38. table.add_row(None, self.cslist, padding=False,
  39. yopt=gtk.FILL|gtk.EXPAND)
  40. ### fill combo list
  41. for changelist in self.pending:
  42. clcombo.append_text(changelist)
  43. clcombo.set_active(0)
  44. def item_activated(self, cslist, hash, *args):
  45. try:
  46. rev = self.repo[hash].rev()
  47. except error.LookupError:
  48. return
  49. if self.graphview:
  50. self.graphview.set_revision_id(rev)
  51. def get_buttons(self):
  52. return [('submit', _('Submit'), gtk.RESPONSE_OK),
  53. ('revert', _('Revert'), gtk.RESPONSE_CANCEL),
  54. ('close', gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)]
  55. def get_default_button(self):
  56. return 'submit'
  57. def get_action_map(self):
  58. return {gtk.RESPONSE_OK: self.submit,
  59. gtk.RESPONSE_CANCEL: self.revert}
  60. def changelist_selected(self, combo):
  61. 'User has selected a changelist, fill cslist'
  62. curcl = combo.get_active_text()
  63. try:
  64. revs = [self.repo[hash] for hash in self.pending[curcl]]
  65. except error.Abort, e:
  66. revs = []
  67. self.cslist.clear()
  68. self.cslist.update(revs, self.repo)
  69. sensitive = not curcl.endswith('(submitted)')
  70. self.buttons['submit'].set_property('sensitive', sensitive)
  71. self.buttons['revert'].set_property('sensitive', sensitive)
  72. self.curcl = curcl
  73. def switch_to(self, normal, working, cmd):
  74. self.table.set_sensitive(normal)
  75. self.buttons['submit'].set_property('visible', normal)
  76. self.buttons['revert'].set_property('visible', normal)
  77. self.buttons['close'].set_property('visible', normal)
  78. if normal:
  79. self.buttons['close'].grab_focus()
  80. def command_done(self, returncode, useraborted, *args):
  81. if returncode == 0:
  82. self.cmd.set_result(_('Finished'), style='ok')
  83. elif useraborted:
  84. self.cmd.set_result(_('Canceled'), style='error')
  85. else:
  86. self.cmd.set_result(_('Failed'), style='error')
  87. def submit(self):
  88. assert(self.curcl.endswith('(pending)'))
  89. cmdline = ['hg', 'p4submit', '--verbose', self.curcl[:-10]]
  90. self.execute_command(cmdline)
  91. def revert(self):
  92. assert(self.curcl.endswith('(pending)'))
  93. cmdline = ['hg', 'p4revert', '--verbose', self.curcl[:-10]]
  94. self.execute_command(cmdline)