eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
child 7229
53054eb5b15a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py	Sun Apr 14 15:09:21 2019 +0200
@@ -0,0 +1,1119 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the queues extension project helper.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtWidgets import QMenu
+
+from E5Gui.E5Action import E5Action
+from E5Gui import E5MessageBox
+
+from ..HgExtensionProjectHelper import HgExtensionProjectHelper
+
+from .queues import Queues
+
+
+class QueuesProjectHelper(HgExtensionProjectHelper):
+    """
+    Class implementing the queues extension project helper.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        super(QueuesProjectHelper, self).__init__()
+    
+    def initActions(self):
+        """
+        Public method to generate the action objects.
+        """
+        self.hgQueueInitAct = E5Action(
+            self.tr('Init Queue Repository'),
+            self.tr('Init Queue Repository'),
+            0, 0, self, 'mercurial_queues_init')
+        self.hgQueueInitAct.setStatusTip(self.tr(
+            'Initialize a new versioned queue repository'
+        ))
+        self.hgQueueInitAct.setWhatsThis(self.tr(
+            """<b>Init Queue Repository</b>"""
+            """<p>This initializes a new versioned queue repository inside"""
+            """ the current repository.</p>"""
+        ))
+        self.hgQueueInitAct.triggered.connect(self.__hgQueueInit)
+        self.actions.append(self.hgQueueInitAct)
+        
+        self.hgQueueCommitAct = E5Action(
+            self.tr('Commit changes'),
+            self.tr('Commit changes...'),
+            0, 0, self, 'mercurial_queues_commit')
+        self.hgQueueCommitAct.setStatusTip(self.tr(
+            'Commit changes in the queue repository'
+        ))
+        self.hgQueueCommitAct.setWhatsThis(self.tr(
+            """<b>Commit changes...</b>"""
+            """<p>This commits changes in the queue repository.</p>"""
+        ))
+        self.hgQueueCommitAct.triggered.connect(self.__hgQueueCommit)
+        self.actions.append(self.hgQueueCommitAct)
+        
+        self.hgQueueNewAct = E5Action(
+            self.tr('New Patch'),
+            self.tr('New Patch...'),
+            0, 0, self, 'mercurial_queues_new')
+        self.hgQueueNewAct.setStatusTip(self.tr(
+            'Create a new patch'
+        ))
+        self.hgQueueNewAct.setWhatsThis(self.tr(
+            """<b>New Patch</b>"""
+            """<p>This creates a new named patch.</p>"""
+        ))
+        self.hgQueueNewAct.triggered.connect(self.__hgQueueNewPatch)
+        self.actions.append(self.hgQueueNewAct)
+        
+        self.hgQueueRefreshAct = E5Action(
+            self.tr('Update Current Patch'),
+            self.tr('Update Current Patch'),
+            0, 0, self, 'mercurial_queues_refresh')
+        self.hgQueueRefreshAct.setStatusTip(self.tr(
+            'Update the current patch'
+        ))
+        self.hgQueueRefreshAct.setWhatsThis(self.tr(
+            """<b>Update Current Patch</b>"""
+            """<p>This updates the current patch.</p>"""
+        ))
+        self.hgQueueRefreshAct.triggered.connect(
+            self.__hgQueueRefreshPatch)
+        self.actions.append(self.hgQueueRefreshAct)
+        
+        self.hgQueueRefreshMessageAct = E5Action(
+            self.tr('Update Current Patch (with Message)'),
+            self.tr('Update Current Patch (with Message)'),
+            0, 0, self, 'mercurial_queues_refresh_message')
+        self.hgQueueRefreshMessageAct.setStatusTip(self.tr(
+            'Update the current patch and edit commit message'
+        ))
+        self.hgQueueRefreshMessageAct.setWhatsThis(self.tr(
+            """<b>Update Current Patch (with Message)</b>"""
+            """<p>This updates the current patch after giving the chance"""
+            """ to change the current commit message.</p>"""
+        ))
+        self.hgQueueRefreshMessageAct.triggered.connect(
+            self.__hgQueueRefreshPatchMessage)
+        self.actions.append(self.hgQueueRefreshMessageAct)
+        
+        self.hgQueueDiffAct = E5Action(
+            self.tr('Show Current Patch'),
+            self.tr('Show Current Patch...'),
+            0, 0, self, 'mercurial_queues_show')
+        self.hgQueueDiffAct.setStatusTip(self.tr(
+            'Show the contents the current patch'
+        ))
+        self.hgQueueDiffAct.setWhatsThis(self.tr(
+            """<b>Show Current Patch</b>"""
+            """<p>This shows the contents of the current patch including"""
+            """ any changes which have been made in the working directory"""
+            """ since the last refresh.</p>"""
+        ))
+        self.hgQueueDiffAct.triggered.connect(self.__hgQueueShowPatch)
+        self.actions.append(self.hgQueueDiffAct)
+        
+        self.hgQueueHeaderAct = E5Action(
+            self.tr('Show Current Message'),
+            self.tr('Show Current Message...'),
+            0, 0, self, 'mercurial_queues_show_message')
+        self.hgQueueHeaderAct.setStatusTip(self.tr(
+            'Show the commit message of the current patch'
+        ))
+        self.hgQueueHeaderAct.setWhatsThis(self.tr(
+            """<b>Show Current Message</b>"""
+            """<p>This shows the commit message of the current patch.</p>"""
+        ))
+        self.hgQueueHeaderAct.triggered.connect(self.__hgQueueShowHeader)
+        self.actions.append(self.hgQueueHeaderAct)
+        
+        self.hgQueueListAct = E5Action(
+            self.tr('List Patches'),
+            self.tr('List Patches...'),
+            0, 0, self, 'mercurial_queues_list')
+        self.hgQueueListAct.setStatusTip(self.tr(
+            'List applied and unapplied patches'
+        ))
+        self.hgQueueListAct.setWhatsThis(self.tr(
+            """<b>List Patches</b>"""
+            """<p>This lists all applied and unapplied patches.</p>"""
+        ))
+        self.hgQueueListAct.triggered.connect(self.__hgQueueListPatches)
+        self.actions.append(self.hgQueueListAct)
+        
+        self.hgQueueFinishAct = E5Action(
+            self.tr('Finish Applied Patches'),
+            self.tr('Finish Applied Patches'),
+            0, 0, self, 'mercurial_queues_finish_applied')
+        self.hgQueueFinishAct.setStatusTip(self.tr(
+            'Finish applied patches'
+        ))
+        self.hgQueueFinishAct.setWhatsThis(self.tr(
+            """<b>Finish Applied Patches</b>"""
+            """<p>This finishes the applied patches by moving them out of"""
+            """ mq control into regular repository history.</p>"""
+        ))
+        self.hgQueueFinishAct.triggered.connect(
+            self.__hgQueueFinishAppliedPatches)
+        self.actions.append(self.hgQueueFinishAct)
+        
+        self.hgQueueRenameAct = E5Action(
+            self.tr('Rename Patch'),
+            self.tr('Rename Patch'),
+            0, 0, self, 'mercurial_queues_rename')
+        self.hgQueueRenameAct.setStatusTip(self.tr(
+            'Rename a patch'
+        ))
+        self.hgQueueRenameAct.setWhatsThis(self.tr(
+            """<b>Rename Patch</b>"""
+            """<p>This renames the current or a named patch.</p>"""
+        ))
+        self.hgQueueRenameAct.triggered.connect(self.__hgQueueRenamePatch)
+        self.actions.append(self.hgQueueRenameAct)
+        
+        self.hgQueueDeleteAct = E5Action(
+            self.tr('Delete Patch'),
+            self.tr('Delete Patch'),
+            0, 0, self, 'mercurial_queues_delete')
+        self.hgQueueDeleteAct.setStatusTip(self.tr(
+            'Delete unapplied patch'
+        ))
+        self.hgQueueDeleteAct.setWhatsThis(self.tr(
+            """<b>Delete Patch</b>"""
+            """<p>This deletes an unapplied patch.</p>"""
+        ))
+        self.hgQueueDeleteAct.triggered.connect(self.__hgQueueDeletePatch)
+        self.actions.append(self.hgQueueDeleteAct)
+        
+        self.hgQueueFoldAct = E5Action(
+            self.tr('Fold Patches'),
+            self.tr('Fold Patches'),
+            0, 0, self, 'mercurial_queues_fold')
+        self.hgQueueFoldAct.setStatusTip(self.tr(
+            'Fold unapplied patches into the current patch'
+        ))
+        self.hgQueueFoldAct.setWhatsThis(self.tr(
+            """<b>Fold Patches</b>"""
+            """<p>This folds unapplied patches into the current patch.</p>"""
+        ))
+        self.hgQueueFoldAct.triggered.connect(
+            self.__hgQueueFoldUnappliedPatches)
+        self.actions.append(self.hgQueueFoldAct)
+        
+        self.hgQueueStatusAct = E5Action(
+            self.tr('Show Status'),
+            self.tr('Show &Status...'),
+            0, 0, self, 'mercurial_queues_status')
+        self.hgQueueStatusAct.setStatusTip(self.tr(
+            'Show the status of the queue repository'
+        ))
+        self.hgQueueStatusAct.setWhatsThis(self.tr(
+            """<b>Show Status</b>"""
+            """<p>This shows the status of the queue repository.</p>"""
+        ))
+        self.hgQueueStatusAct.triggered.connect(self.__hgQueueStatus)
+        self.actions.append(self.hgQueueStatusAct)
+        
+        self.hgQueueSummaryAct = E5Action(
+            self.tr('Show Summary'),
+            self.tr('Show summary...'),
+            0, 0, self, 'mercurial_queues_summary')
+        self.hgQueueSummaryAct.setStatusTip(self.tr(
+            'Show summary information of the queue repository'
+        ))
+        self.hgQueueSummaryAct.setWhatsThis(self.tr(
+            """<b>Show summary</b>"""
+            """<p>This shows some summary information of the queue"""
+            """ repository.</p>"""
+        ))
+        self.hgQueueSummaryAct.triggered.connect(self.__hgQueueSummary)
+        self.actions.append(self.hgQueueSummaryAct)
+        
+        self.__initPushPopActions()
+        self.__initPushPopForceActions()
+        self.__initGuardsActions()
+        self.__initQueuesMgmtActions()
+    
+    def __initPushPopActions(self):
+        """
+        Private method to generate the push and pop action objects.
+        """
+        self.hgQueuePushAct = E5Action(
+            self.tr('Push Next Patch'),
+            self.tr('Push Next Patch'),
+            0, 0, self, 'mercurial_queues_push_next')
+        self.hgQueuePushAct.setStatusTip(self.tr(
+            'Push the next patch onto the stack'
+        ))
+        self.hgQueuePushAct.setWhatsThis(self.tr(
+            """<b>Push Next Patch</b>"""
+            """<p>This pushes the next patch onto the stack of applied"""
+            """ patches.</p>"""
+        ))
+        self.hgQueuePushAct.triggered.connect(self.__hgQueuePushPatch)
+        self.actions.append(self.hgQueuePushAct)
+        
+        self.hgQueuePushAllAct = E5Action(
+            self.tr('Push All Patches'),
+            self.tr('Push All Patches'),
+            0, 0, self, 'mercurial_queues_push_all')
+        self.hgQueuePushAllAct.setStatusTip(self.tr(
+            'Push all patches onto the stack'
+        ))
+        self.hgQueuePushAllAct.setWhatsThis(self.tr(
+            """<b>Push All Patches</b>"""
+            """<p>This pushes all patches onto the stack of applied"""
+            """ patches.</p>"""
+        ))
+        self.hgQueuePushAllAct.triggered.connect(
+            self.__hgQueuePushAllPatches)
+        self.actions.append(self.hgQueuePushAllAct)
+        
+        self.hgQueuePushUntilAct = E5Action(
+            self.tr('Push Patches'),
+            self.tr('Push Patches'),
+            0, 0, self, 'mercurial_queues_push_until')
+        self.hgQueuePushUntilAct.setStatusTip(self.tr(
+            'Push patches onto the stack'
+        ))
+        self.hgQueuePushUntilAct.setWhatsThis(self.tr(
+            """<b>Push Patches</b>"""
+            """<p>This pushes patches onto the stack of applied patches"""
+            """ until a named patch is at the top of the stack.</p>"""
+        ))
+        self.hgQueuePushUntilAct.triggered.connect(
+            self.__hgQueuePushPatches)
+        self.actions.append(self.hgQueuePushUntilAct)
+        
+        self.hgQueuePopAct = E5Action(
+            self.tr('Pop Current Patch'),
+            self.tr('Pop Current Patch'),
+            0, 0, self, 'mercurial_queues_pop_current')
+        self.hgQueuePopAct.setStatusTip(self.tr(
+            'Pop the current patch off the stack'
+        ))
+        self.hgQueuePopAct.setWhatsThis(self.tr(
+            """<b>Pop Current Patch</b>"""
+            """<p>This pops the current patch off the stack of applied"""
+            """ patches.</p>"""
+        ))
+        self.hgQueuePopAct.triggered.connect(self.__hgQueuePopPatch)
+        self.actions.append(self.hgQueuePopAct)
+        
+        self.hgQueuePopAllAct = E5Action(
+            self.tr('Pop All Patches'),
+            self.tr('Pop All Patches'),
+            0, 0, self, 'mercurial_queues_pop_all')
+        self.hgQueuePopAllAct.setStatusTip(self.tr(
+            'Pop all patches off the stack'
+        ))
+        self.hgQueuePopAllAct.setWhatsThis(self.tr(
+            """<b>Pop All Patches</b>"""
+            """<p>This pops all patches off the stack of applied"""
+            """ patches.</p>"""
+        ))
+        self.hgQueuePopAllAct.triggered.connect(
+            self.__hgQueuePopAllPatches)
+        self.actions.append(self.hgQueuePopAllAct)
+        
+        self.hgQueuePopUntilAct = E5Action(
+            self.tr('Pop Patches'),
+            self.tr('Pop Patches'),
+            0, 0, self, 'mercurial_queues_pop_until')
+        self.hgQueuePopUntilAct.setStatusTip(self.tr(
+            'Pop patches off the stack'
+        ))
+        self.hgQueuePopUntilAct.setWhatsThis(self.tr(
+            """<b>Pop Patches</b>"""
+            """<p>This pops patches off the stack of applied patches"""
+            """ until a named patch is at the top of the stack.</p>"""
+        ))
+        self.hgQueuePopUntilAct.triggered.connect(self.__hgQueuePopPatches)
+        self.actions.append(self.hgQueuePopUntilAct)
+        
+        self.hgQueueGotoAct = E5Action(
+            self.tr('Go to Patch'),
+            self.tr('Go to Patch'),
+            0, 0, self, 'mercurial_queues_goto')
+        self.hgQueueGotoAct.setStatusTip(self.tr(
+            'Push or pop patches until named patch is at top of stack'
+        ))
+        self.hgQueueGotoAct.setWhatsThis(self.tr(
+            """<b>Go to Patch</b>"""
+            """<p>This pushes or pops patches until a named patch is at the"""
+            """ top of the stack.</p>"""
+        ))
+        self.hgQueueGotoAct.triggered.connect(self.__hgQueueGotoPatch)
+        self.actions.append(self.hgQueueGotoAct)
+    
+    def __initPushPopForceActions(self):
+        """
+        Private method to generate the push and pop (force) action objects.
+        """
+        self.hgQueuePushForceAct = E5Action(
+            self.tr('Push Next Patch'),
+            self.tr('Push Next Patch'),
+            0, 0, self, 'mercurial_queues_push_next_force')
+        self.hgQueuePushForceAct.setStatusTip(self.tr(
+            'Push the next patch onto the stack on top of local changes'
+        ))
+        self.hgQueuePushForceAct.setWhatsThis(self.tr(
+            """<b>Push Next Patch</b>"""
+            """<p>This pushes the next patch onto the stack of applied"""
+            """ patches on top of local changes.</p>"""
+        ))
+        self.hgQueuePushForceAct.triggered.connect(
+            self.__hgQueuePushPatchForced)
+        self.actions.append(self.hgQueuePushForceAct)
+        
+        self.hgQueuePushAllForceAct = E5Action(
+            self.tr('Push All Patches'),
+            self.tr('Push All Patches'),
+            0, 0, self, 'mercurial_queues_push_all_force')
+        self.hgQueuePushAllForceAct.setStatusTip(self.tr(
+            'Push all patches onto the stack on top of local changes'
+        ))
+        self.hgQueuePushAllForceAct.setWhatsThis(self.tr(
+            """<b>Push All Patches</b>"""
+            """<p>This pushes all patches onto the stack of applied patches"""
+            """ on top of local changes.</p>"""
+        ))
+        self.hgQueuePushAllForceAct.triggered.connect(
+            self.__hgQueuePushAllPatchesForced)
+        self.actions.append(self.hgQueuePushAllForceAct)
+        
+        self.hgQueuePushUntilForceAct = E5Action(
+            self.tr('Push Patches'),
+            self.tr('Push Patches'),
+            0, 0, self, 'mercurial_queues_push_until_force')
+        self.hgQueuePushUntilForceAct.setStatusTip(self.tr(
+            'Push patches onto the stack on top of local changes'
+        ))
+        self.hgQueuePushUntilForceAct.setWhatsThis(self.tr(
+            """<b>Push Patches</b>"""
+            """<p>This pushes patches onto the stack  of applied patches"""
+            """ until a named patch is at the top of the stack on top of"""
+            """ local changes.</p>"""
+        ))
+        self.hgQueuePushUntilForceAct.triggered.connect(
+            self.__hgQueuePushPatchesForced)
+        self.actions.append(self.hgQueuePushUntilForceAct)
+        
+        self.hgQueuePopForceAct = E5Action(
+            self.tr('Pop Current Patch'),
+            self.tr('Pop Current Patch'),
+            0, 0, self, 'mercurial_queues_pop_current_force')
+        self.hgQueuePopForceAct.setStatusTip(self.tr(
+            'Pop the current patch off the stack forgetting local changes'
+        ))
+        self.hgQueuePopForceAct.setWhatsThis(self.tr(
+            """<b>Pop Current Patch</b>"""
+            """<p>This pops the current patch off the stack of applied"""
+            """ patches"""
+            """ forgetting local changes.</p>"""
+        ))
+        self.hgQueuePopForceAct.triggered.connect(
+            self.__hgQueuePopPatchForced)
+        self.actions.append(self.hgQueuePopForceAct)
+        
+        self.hgQueuePopAllForceAct = E5Action(
+            self.tr('Pop All Patches'),
+            self.tr('Pop All Patches'),
+            0, 0, self, 'mercurial_queues_pop_all_force')
+        self.hgQueuePopAllForceAct.setStatusTip(self.tr(
+            'Pop all patches off the stack forgetting local changes'
+        ))
+        self.hgQueuePopAllForceAct.setWhatsThis(self.tr(
+            """<b>Pop All Patches</b>"""
+            """<p>This pops all patches off the stack of applied patches"""
+            """  forgetting local changes.</p>"""
+        ))
+        self.hgQueuePopAllForceAct.triggered.connect(
+            self.__hgQueuePopAllPatchesForced)
+        self.actions.append(self.hgQueuePopAllForceAct)
+        
+        self.hgQueuePopUntilForceAct = E5Action(
+            self.tr('Pop Patches'),
+            self.tr('Pop Patches'),
+            0, 0, self, 'mercurial_queues_pop_until_force')
+        self.hgQueuePopUntilForceAct.setStatusTip(self.tr(
+            'Pop patches off the stack forgetting local changes'
+        ))
+        self.hgQueuePopUntilForceAct.setWhatsThis(self.tr(
+            """<b>Pop Patches</b>"""
+            """<p>This pops patches off the stack of applied patches until"""
+            """ a named patch is at the top of the stack forgetting local"""
+            """ changes.</p>"""
+        ))
+        self.hgQueuePopUntilForceAct.triggered.connect(
+            self.__hgQueuePopPatchesForced)
+        self.actions.append(self.hgQueuePopUntilForceAct)
+        
+        self.hgQueueGotoForceAct = E5Action(
+            self.tr('Go to Patch'),
+            self.tr('Go to Patch'),
+            0, 0, self, 'mercurial_queues_goto_force')
+        self.hgQueueGotoForceAct.setStatusTip(self.tr(
+            'Push or pop patches until named patch is at top of stack'
+            ' overwriting any local changes'
+        ))
+        self.hgQueueGotoForceAct.setWhatsThis(self.tr(
+            """<b>Go to Patch</b>"""
+            """<p>This pushes or pops patches until a named patch is at the"""
+            """ top of the stack overwriting any local changes.</p>"""
+        ))
+        self.hgQueueGotoForceAct.triggered.connect(
+            self.__hgQueueGotoPatchForced)
+        self.actions.append(self.hgQueueGotoForceAct)
+    
+    def __initGuardsActions(self):
+        """
+        Private method to generate the guards action objects.
+        """
+        self.hgQueueDefineGuardsAct = E5Action(
+            self.tr('Define Guards'),
+            self.tr('Define Guards...'),
+            0, 0, self, 'mercurial_queues_guards_define')
+        self.hgQueueDefineGuardsAct.setStatusTip(self.tr(
+            'Define guards for the current or a named patch'
+        ))
+        self.hgQueueDefineGuardsAct.setWhatsThis(self.tr(
+            """<b>Define Guards</b>"""
+            """<p>This opens a dialog to define guards for the current"""
+            """ or a named patch.</p>"""
+        ))
+        self.hgQueueDefineGuardsAct.triggered.connect(
+            self.__hgQueueGuardsDefine)
+        self.actions.append(self.hgQueueDefineGuardsAct)
+        
+        self.hgQueueDropAllGuardsAct = E5Action(
+            self.tr('Drop All Guards'),
+            self.tr('Drop All Guards...'),
+            0, 0, self, 'mercurial_queues_guards_drop_all')
+        self.hgQueueDropAllGuardsAct.setStatusTip(self.tr(
+            'Drop all guards of the current or a named patch'
+        ))
+        self.hgQueueDropAllGuardsAct.setWhatsThis(self.tr(
+            """<b>Drop All Guards</b>"""
+            """<p>This drops all guards of the current or a named patch.</p>"""
+        ))
+        self.hgQueueDropAllGuardsAct.triggered.connect(
+            self.__hgQueueGuardsDropAll)
+        self.actions.append(self.hgQueueDropAllGuardsAct)
+        
+        self.hgQueueListGuardsAct = E5Action(
+            self.tr('List Guards'),
+            self.tr('List Guards...'),
+            0, 0, self, 'mercurial_queues_guards_list')
+        self.hgQueueListGuardsAct.setStatusTip(self.tr(
+            'List guards of the current or a named patch'
+        ))
+        self.hgQueueListGuardsAct.setWhatsThis(self.tr(
+            """<b>List Guards</b>"""
+            """<p>This lists the guards of the current or a named patch.</p>"""
+        ))
+        self.hgQueueListGuardsAct.triggered.connect(
+            self.__hgQueueGuardsList)
+        self.actions.append(self.hgQueueListGuardsAct)
+        
+        self.hgQueueListAllGuardsAct = E5Action(
+            self.tr('List All Guards'),
+            self.tr('List All Guards...'),
+            0, 0, self, 'mercurial_queues_guards_list_all')
+        self.hgQueueListAllGuardsAct.setStatusTip(self.tr(
+            'List all guards of all patches'
+        ))
+        self.hgQueueListAllGuardsAct.setWhatsThis(self.tr(
+            """<b>List All Guards</b>"""
+            """<p>This lists all guards of all patches.</p>"""
+        ))
+        self.hgQueueListAllGuardsAct.triggered.connect(
+            self.__hgQueueGuardsListAll)
+        self.actions.append(self.hgQueueListAllGuardsAct)
+        
+        self.hgQueueActivateGuardsAct = E5Action(
+            self.tr('Set Active Guards'),
+            self.tr('Set Active Guards...'),
+            0, 0, self, 'mercurial_queues_guards_set_active')
+        self.hgQueueActivateGuardsAct.setStatusTip(self.tr(
+            'Set the list of active guards'
+        ))
+        self.hgQueueActivateGuardsAct.setWhatsThis(self.tr(
+            """<b>Set Active Guards</b>"""
+            """<p>This opens a dialog to set the active guards.</p>"""
+        ))
+        self.hgQueueActivateGuardsAct.triggered.connect(
+            self.__hgQueueGuardsSetActive)
+        self.actions.append(self.hgQueueActivateGuardsAct)
+        
+        self.hgQueueDeactivateGuardsAct = E5Action(
+            self.tr('Deactivate Guards'),
+            self.tr('Deactivate Guards...'),
+            0, 0, self, 'mercurial_queues_guards_deactivate')
+        self.hgQueueDeactivateGuardsAct.setStatusTip(self.tr(
+            'Deactivate all active guards'
+        ))
+        self.hgQueueDeactivateGuardsAct.setWhatsThis(self.tr(
+            """<b>Deactivate Guards</b>"""
+            """<p>This deactivates all active guards.</p>"""
+        ))
+        self.hgQueueDeactivateGuardsAct.triggered.connect(
+            self.__hgQueueGuardsDeactivate)
+        self.actions.append(self.hgQueueDeactivateGuardsAct)
+        
+        self.hgQueueIdentifyActiveGuardsAct = E5Action(
+            self.tr('Identify Active Guards'),
+            self.tr('Identify Active Guards...'),
+            0, 0, self, 'mercurial_queues_guards_identify_active')
+        self.hgQueueIdentifyActiveGuardsAct.setStatusTip(self.tr(
+            'Show a list of active guards'
+        ))
+        self.hgQueueIdentifyActiveGuardsAct.setWhatsThis(self.tr(
+            """<b>Identify Active Guards</b>"""
+            """<p>This opens a dialog showing a list of active guards.</p>"""
+        ))
+        self.hgQueueIdentifyActiveGuardsAct.triggered.connect(
+            self.__hgQueueGuardsIdentifyActive)
+        self.actions.append(self.hgQueueIdentifyActiveGuardsAct)
+    
+    def __initQueuesMgmtActions(self):
+        """
+        Private method to generate the queues management action objects.
+        """
+        self.hgQueueCreateQueueAct = E5Action(
+            self.tr('Create Queue'),
+            self.tr('Create Queue'),
+            0, 0, self, 'mercurial_queues_create_queue')
+        self.hgQueueCreateQueueAct.setStatusTip(self.tr(
+            'Create a new patch queue'
+        ))
+        self.hgQueueCreateQueueAct.setWhatsThis(self.tr(
+            """<b>Create Queue</b>"""
+            """<p>This creates a new patch queue.</p>"""
+        ))
+        self.hgQueueCreateQueueAct.triggered.connect(
+            self.__hgQueueCreateQueue)
+        self.actions.append(self.hgQueueCreateQueueAct)
+        
+        self.hgQueueRenameQueueAct = E5Action(
+            self.tr('Rename Queue'),
+            self.tr('Rename Queue'),
+            0, 0, self, 'mercurial_queues_rename_queue')
+        self.hgQueueRenameQueueAct.setStatusTip(self.tr(
+            'Rename the active patch queue'
+        ))
+        self.hgQueueRenameQueueAct.setWhatsThis(self.tr(
+            """<b>Rename Queue</b>"""
+            """<p>This renames the active patch queue.</p>"""
+        ))
+        self.hgQueueRenameQueueAct.triggered.connect(
+            self.__hgQueueRenameQueue)
+        self.actions.append(self.hgQueueRenameQueueAct)
+        
+        self.hgQueueDeleteQueueAct = E5Action(
+            self.tr('Delete Queue'),
+            self.tr('Delete Queue'),
+            0, 0, self, 'mercurial_queues_delete_queue')
+        self.hgQueueDeleteQueueAct.setStatusTip(self.tr(
+            'Delete the reference to a patch queue'
+        ))
+        self.hgQueueDeleteQueueAct.setWhatsThis(self.tr(
+            """<b>Delete Queue</b>"""
+            """<p>This deletes the reference to a patch queue.</p>"""
+        ))
+        self.hgQueueDeleteQueueAct.triggered.connect(
+            self.__hgQueueDeleteQueue)
+        self.actions.append(self.hgQueueDeleteQueueAct)
+        
+        self.hgQueuePurgeQueueAct = E5Action(
+            self.tr('Purge Queue'),
+            self.tr('Purge Queue'),
+            0, 0, self, 'mercurial_queues_purge_queue')
+        self.hgQueuePurgeQueueAct.setStatusTip(self.tr(
+            'Delete the reference to a patch queue and remove the patch'
+            ' directory'
+        ))
+        self.hgQueuePurgeQueueAct.setWhatsThis(self.tr(
+            """<b>Purge Queue</b>"""
+            """<p>This deletes the reference to a patch queue and removes"""
+            """ the patch directory.</p>"""
+        ))
+        self.hgQueuePurgeQueueAct.triggered.connect(
+            self.__hgQueuePurgeQueue)
+        self.actions.append(self.hgQueuePurgeQueueAct)
+        
+        self.hgQueueActivateQueueAct = E5Action(
+            self.tr('Activate Queue'),
+            self.tr('Activate Queue'),
+            0, 0, self, 'mercurial_queues_activate_queue')
+        self.hgQueueActivateQueueAct.setStatusTip(self.tr(
+            'Set the active queue'
+        ))
+        self.hgQueueActivateQueueAct.setWhatsThis(self.tr(
+            """<b>Activate Queue</b>"""
+            """<p>This sets the active queue.</p>"""
+        ))
+        self.hgQueueActivateQueueAct.triggered.connect(
+            self.__hgQueueActivateQueue)
+        self.actions.append(self.hgQueueActivateQueueAct)
+        
+        self.hgQueueListQueuesAct = E5Action(
+            self.tr('List Queues'),
+            self.tr('List Queues...'),
+            0, 0, self, 'mercurial_queues_list_queues')
+        self.hgQueueListQueuesAct.setStatusTip(self.tr(
+            'List the available queues'
+        ))
+        self.hgQueueListQueuesAct.setWhatsThis(self.tr(
+            """<b>List Queues</b>"""
+            """<p>This opens a dialog showing all available queues.</p>"""
+        ))
+        self.hgQueueListQueuesAct.triggered.connect(
+            self.__hgQueueListQueues)
+        self.actions.append(self.hgQueueListQueuesAct)
+    
+    def initMenu(self, mainMenu):
+        """
+        Public method to generate the extension menu.
+        
+        @param mainMenu reference to the main menu (QMenu)
+        @return populated menu (QMenu)
+        """
+        menu = QMenu(self.menuTitle(), mainMenu)
+        menu.setTearOffEnabled(True)
+        
+        pushPopMenu = QMenu(self.tr("Push/Pop"), menu)
+        pushPopMenu.setTearOffEnabled(True)
+        pushPopMenu.addAction(self.hgQueuePushAct)
+        pushPopMenu.addAction(self.hgQueuePushUntilAct)
+        pushPopMenu.addAction(self.hgQueuePushAllAct)
+        pushPopMenu.addSeparator()
+        pushPopMenu.addAction(self.hgQueuePopAct)
+        pushPopMenu.addAction(self.hgQueuePopUntilAct)
+        pushPopMenu.addAction(self.hgQueuePopAllAct)
+        pushPopMenu.addSeparator()
+        pushPopMenu.addAction(self.hgQueueGotoAct)
+        
+        pushPopForceMenu = QMenu(self.tr("Push/Pop (force)"), menu)
+        pushPopForceMenu.setTearOffEnabled(True)
+        pushPopForceMenu.addAction(self.hgQueuePushForceAct)
+        pushPopForceMenu.addAction(self.hgQueuePushUntilForceAct)
+        pushPopForceMenu.addAction(self.hgQueuePushAllForceAct)
+        pushPopForceMenu.addSeparator()
+        pushPopForceMenu.addAction(self.hgQueuePopForceAct)
+        pushPopForceMenu.addAction(self.hgQueuePopUntilForceAct)
+        pushPopForceMenu.addAction(self.hgQueuePopAllForceAct)
+        pushPopForceMenu.addSeparator()
+        pushPopForceMenu.addAction(self.hgQueueGotoForceAct)
+        
+        guardsMenu = QMenu(self.tr("Guards"), menu)
+        guardsMenu.setTearOffEnabled(True)
+        guardsMenu.addAction(self.hgQueueDefineGuardsAct)
+        guardsMenu.addAction(self.hgQueueDropAllGuardsAct)
+        guardsMenu.addSeparator()
+        guardsMenu.addAction(self.hgQueueListGuardsAct)
+        guardsMenu.addAction(self.hgQueueListAllGuardsAct)
+        guardsMenu.addSeparator()
+        guardsMenu.addAction(self.hgQueueActivateGuardsAct)
+        guardsMenu.addAction(self.hgQueueDeactivateGuardsAct)
+        guardsMenu.addSeparator()
+        guardsMenu.addAction(self.hgQueueIdentifyActiveGuardsAct)
+        
+        queuesMenu = QMenu(self.tr("Queue Management"), menu)
+        queuesMenu.setTearOffEnabled(True)
+        queuesMenu.addAction(self.hgQueueCreateQueueAct)
+        queuesMenu.addAction(self.hgQueueRenameQueueAct)
+        queuesMenu.addAction(self.hgQueueDeleteQueueAct)
+        queuesMenu.addAction(self.hgQueuePurgeQueueAct)
+        queuesMenu.addSeparator()
+        queuesMenu.addAction(self.hgQueueActivateQueueAct)
+        queuesMenu.addSeparator()
+        queuesMenu.addAction(self.hgQueueListQueuesAct)
+        
+        menu.addAction(self.hgQueueInitAct)
+        menu.addAction(self.hgQueueCommitAct)
+        menu.addSeparator()
+        menu.addAction(self.hgQueueNewAct)
+        menu.addAction(self.hgQueueRefreshAct)
+        menu.addAction(self.hgQueueRefreshMessageAct)
+        menu.addAction(self.hgQueueFinishAct)
+        menu.addSeparator()
+        menu.addAction(self.hgQueueStatusAct)
+        menu.addAction(self.hgQueueSummaryAct)
+        menu.addSeparator()
+        menu.addAction(self.hgQueueDiffAct)
+        menu.addAction(self.hgQueueHeaderAct)
+        menu.addSeparator()
+        menu.addAction(self.hgQueueListAct)
+        menu.addSeparator()
+        menu.addMenu(pushPopMenu)
+        menu.addMenu(pushPopForceMenu)
+        menu.addSeparator()
+        menu.addAction(self.hgQueueRenameAct)
+        menu.addAction(self.hgQueueDeleteAct)
+        menu.addSeparator()
+        menu.addAction(self.hgQueueFoldAct)
+        menu.addSeparator()
+        menu.addMenu(guardsMenu)
+        menu.addSeparator()
+        menu.addMenu(queuesMenu)
+        
+        return menu
+    
+    def menuTitle(self):
+        """
+        Public method to get the menu title.
+        
+        @return title of the menu (string)
+        """
+        return self.tr("Queues")
+    
+    def __hgQueueNewPatch(self):
+        """
+        Private slot used to create a new named patch.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueNewPatch(self.project.getProjectPath())
+    
+    def __hgQueueRefreshPatch(self):
+        """
+        Private slot used to refresh the current patch.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueRefreshPatch(self.project.getProjectPath())
+    
+    def __hgQueueRefreshPatchMessage(self):
+        """
+        Private slot used to refresh the current patch and its commit message.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueRefreshPatch(self.project.getProjectPath(),
+                                 editMessage=True)
+    
+    def __hgQueueShowPatch(self):
+        """
+        Private slot used to show the contents of the current patch.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueShowPatch(self.project.getProjectPath())
+    
+    def __hgQueueShowHeader(self):
+        """
+        Private slot used to show the commit message of the current patch.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueShowHeader(self.project.getProjectPath())
+    
+    def __hgQueuePushPopPatches(self, name, operation, doAll=False,
+                                named=False, force=False):
+        """
+        Private method to push patches onto the stack or pop patches off the
+        stack.
+        
+        @param name file/directory name (string)
+        @param operation operation type to be performed (Queues.POP,
+            Queues.PUSH, Queues.GOTO)
+        @keyparam doAll flag indicating to push/pop all (boolean)
+        @keyparam named flag indicating to push/pop until a named patch
+            is at the top of the stack (boolean)
+        @keyparam force flag indicating a forceful pop (boolean)
+        """
+        shouldReopen = self.vcs.getExtensionObject("mq")\
+            .hgQueuePushPopPatches(name, operation=operation, doAll=doAll,
+                                   named=named, force=force)
+        if shouldReopen:
+            res = E5MessageBox.yesNo(
+                None,
+                self.tr("Changing Applied Patches"),
+                self.tr("""The project should be reread. Do this now?"""),
+                yesDefault=True)
+            if res:
+                self.project.reopenProject()
+    
+    def __hgQueuePushPatch(self):
+        """
+        Private slot used to push the next patch onto the stack.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.PUSH, doAll=False, named=False)
+    
+    def __hgQueuePushPatchForced(self):
+        """
+        Private slot used to push the next patch onto the stack on top
+        of local changes.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.PUSH, doAll=False, named=False, force=True)
+    
+    def __hgQueuePushAllPatches(self):
+        """
+        Private slot used to push all patches onto the stack.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.PUSH, doAll=True, named=False)
+    
+    def __hgQueuePushAllPatchesForced(self):
+        """
+        Private slot used to push all patches onto the stack on top
+        of local changes.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.PUSH, doAll=True, named=False, force=True)
+    
+    def __hgQueuePushPatches(self):
+        """
+        Private slot used to push patches onto the stack until a named
+        one is at the top.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.PUSH, doAll=False, named=True)
+    
+    def __hgQueuePushPatchesForced(self):
+        """
+        Private slot used to push patches onto the stack until a named
+        one is at the top on top of local changes.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.PUSH, doAll=False, named=True, force=True)
+    
+    def __hgQueuePopPatch(self):
+        """
+        Private slot used to pop the current patch off the stack.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.POP, doAll=False, named=False)
+    
+    def __hgQueuePopPatchForced(self):
+        """
+        Private slot used to pop the current patch off the stack forgetting
+        any local changes to patched files.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.POP, doAll=False, named=False, force=True)
+    
+    def __hgQueuePopAllPatches(self):
+        """
+        Private slot used to pop all patches off the stack.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.POP, doAll=True, named=False)
+    
+    def __hgQueuePopAllPatchesForced(self):
+        """
+        Private slot used to pop all patches off the stack forgetting
+        any local changes to patched files.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.POP, doAll=True, named=False, force=True)
+    
+    def __hgQueuePopPatches(self):
+        """
+        Private slot used to pop patches off the stack until a named
+        one is at the top.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.POP, doAll=False, named=True)
+    
+    def __hgQueuePopPatchesForced(self):
+        """
+        Private slot used to pop patches off the stack until a named
+        one is at the top forgetting any local changes to patched files.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.POP, doAll=False, named=True, force=True)
+    
+    def __hgQueueGotoPatch(self):
+        """
+        Private slot used to push or pop patches until the a named one
+        is at the top of the stack.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.GOTO, doAll=False, named=True)
+    
+    def __hgQueueGotoPatchForced(self):
+        """
+        Private slot used to push or pop patches until the a named one
+        is at the top of the stack overwriting local changes.
+        """
+        self.__hgQueuePushPopPatches(
+            self.project.getProjectPath(),
+            operation=Queues.GOTO, doAll=False, named=True, force=True)
+    
+    def __hgQueueListPatches(self):
+        """
+        Private slot used to show a list of applied and unapplied patches.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueListPatches(self.project.getProjectPath())
+    
+    def __hgQueueFinishAppliedPatches(self):
+        """
+        Private slot used to finish all applied patches.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueFinishAppliedPatches(self.project.getProjectPath())
+    
+    def __hgQueueRenamePatch(self):
+        """
+        Private slot used to rename a patch.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueRenamePatch(self.project.getProjectPath())
+    
+    def __hgQueueDeletePatch(self):
+        """
+        Private slot used to delete a patch.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueDeletePatch(self.project.getProjectPath())
+    
+    def __hgQueueFoldUnappliedPatches(self):
+        """
+        Private slot used to fold patches into the current patch.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueFoldUnappliedPatches(self.project.getProjectPath())
+    
+    def __hgQueueGuardsDefine(self):
+        """
+        Private slot used to define guards for the current or a named patch.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueGuardsDefine(self.project.getProjectPath())
+    
+    def __hgQueueGuardsDropAll(self):
+        """
+        Private slot used to drop all guards of the current or a named patch.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueGuardsDropAll(self.project.getProjectPath())
+    
+    def __hgQueueGuardsList(self):
+        """
+        Private slot used to list the guards for the current or a named patch.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueGuardsList(self.project.getProjectPath())
+    
+    def __hgQueueGuardsListAll(self):
+        """
+        Private slot used to list all guards of all patches.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueGuardsListAll(self.project.getProjectPath())
+    
+    def __hgQueueGuardsSetActive(self):
+        """
+        Private slot used to set the active guards.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueGuardsSetActive(self.project.getProjectPath())
+    
+    def __hgQueueGuardsDeactivate(self):
+        """
+        Private slot used to deactivate all active guards.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueGuardsDeactivate(self.project.getProjectPath())
+    
+    def __hgQueueGuardsIdentifyActive(self):
+        """
+        Private slot used to list all active guards.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueGuardsIdentifyActive(self.project.getProjectPath())
+    
+    def __hgQueueCreateQueue(self):
+        """
+        Private slot used to create a new queue.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueCreateRenameQueue(self.project.getProjectPath(), True)
+    
+    def __hgQueueRenameQueue(self):
+        """
+        Private slot used to rename the active queue.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueCreateRenameQueue(self.project.getProjectPath(), False)
+    
+    def __hgQueueDeleteQueue(self):
+        """
+        Private slot used to delete the reference to a queue.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueDeletePurgeActivateQueue(self.project.getProjectPath(),
+                                             Queues.QUEUE_DELETE)
+    
+    def __hgQueuePurgeQueue(self):
+        """
+        Private slot used to delete the reference to a queue and remove
+        the patch directory.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueDeletePurgeActivateQueue(self.project.getProjectPath(),
+                                             Queues.QUEUE_PURGE)
+    
+    def __hgQueueActivateQueue(self):
+        """
+        Private slot used to set the active queue.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueDeletePurgeActivateQueue(self.project.getProjectPath(),
+                                             Queues.QUEUE_ACTIVATE)
+    
+    def __hgQueueListQueues(self):
+        """
+        Private slot used to list available queues.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueListQueues(self.project.getProjectPath())
+    
+    def __hgQueueInit(self):
+        """
+        Private slot to initialize a new queue repository.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueInit(self.project.getProjectPath())
+    
+    def __hgQueueCommit(self):
+        """
+        Private slot to commit changes in the queue repository.
+        """
+        self.vcs.vcsCommit(self.project.getProjectPath(), "", mq=True)
+    
+    def __hgQueueStatus(self):
+        """
+        Private slot to show the status of the queue repository.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueStatus(self.project.getProjectPath())
+    
+    def __hgQueueSummary(self):
+        """
+        Private slot to show a summary of the queue repository.
+        """
+        self.vcs.hgSummary(mq=True)

eric ide

mercurial