Added a 'Merge' action to the Mercurial log browser action menu.

Wed, 08 Feb 2017 19:24:21 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 08 Feb 2017 19:24:21 +0100
changeset 5496
d157a2319073
parent 5495
9584e91c9857
child 5497
7cba888c8895

Added a 'Merge' action to the Mercurial log browser action menu.

Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/hg.py file | annotate | diff | comparison | revisions
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Wed Feb 08 19:12:36 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Wed Feb 08 19:24:21 2017 +0100
@@ -238,12 +238,19 @@
         Private method to initialize the actions menu.
         """
         self.__actionsMenu = QMenu()
+        
         self.__graftAct = self.__actionsMenu.addAction(
             UI.PixmapCache.getIcon("vcsGraft.png"),
             self.tr("Copy Changesets"), self.__graftActTriggered)
         self.__graftAct.setToolTip(self.tr(
             "Copy the selected changesets to the current branch"))
         
+        self.__mergeAct = self.__actionsMenu.addAction(
+            UI.PixmapCache.getIcon("vcsMerge.png"),
+            self.tr("Merge with Changeset"), self.__mergeActTriggered)
+        self.__mergeAct.setToolTip(self.tr(
+            "Merge the working directory with the selected changeset"))
+        
         self.__phaseAct = self.__actionsMenu.addAction(
             self.tr("Change Phase"), self.__phaseActTriggered)
         self.__phaseAct.setToolTip(self.tr(
@@ -319,7 +326,6 @@
             UI.PixmapCache.getIcon("actionsToolButton.png"))
         self.actionsButton.setMenu(self.__actionsMenu)
     
-    # TODO: add action "Merge" (1 revision selected)
     # TODO: add action "Create Changegroup" (>=2 revs, lowest rev is base)
     # TODO: add action "Sign Revision" (>= 1 revs) (GPG extension)
     # TODO: add action "Verify Signature" (1 rev) (GPG extension)
@@ -1417,6 +1423,7 @@
                 # step 2: set the status of the graft action
                 self.__graftAct.setEnabled(otherBranches > 0)
             
+            self.__mergeAct.setEnabled(len(self.logTree.selectedItems()) == 1)
             self.__tagAct.setEnabled(len(self.logTree.selectedItems()) == 1)
             self.__switchAct.setEnabled(len(self.logTree.selectedItems()) == 1)
             self.__bookmarkAct.setEnabled(
@@ -2116,6 +2123,17 @@
         
         self.on_refreshButton_clicked()
     
+    @pyqtSlot()
+    def __mergeActTriggered(self):
+        """
+        Private slot to merge the working directory with the selected
+        changeset.
+        """
+        itm = self.logTree.selectedItems()[0]
+        rev = "rev({0})".format(
+            itm.text(self.RevisionColumn).strip().split(":", 1)[0])
+        self.vcs.vcsMerge(self.repodir, rev=rev)
+    
     def __actionMode(self):
         """
         Private method to get the selected action mode.
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py	Wed Feb 08 19:12:36 2017 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/hg.py	Wed Feb 08 19:24:21 2017 +0100
@@ -1010,11 +1010,14 @@
         
         return res
     
-    def vcsMerge(self, name):
+    def vcsMerge(self, name, rev=""):
         """
         Public method used to merge a URL/revision into the local project.
         
-        @param name file/directory name to be merged (string)
+        @param name file/directory name to be merged
+        @type str
+        @keyparam rev revision to merge with
+        @type str
         """
         dname, fname = self.splitPath(name)
         
@@ -1025,14 +1028,17 @@
             if os.path.splitdrive(repodir)[1] == os.sep:
                 return
         
-        from .HgMergeDialog import HgMergeDialog
-        dlg = HgMergeDialog(self.hgGetTagsList(repodir),
-                            self.hgGetBranchesList(repodir),
-                            self.hgGetBookmarksList(repodir))
-        if dlg.exec_() == QDialog.Accepted:
-            rev, force = dlg.getParameters()
+        if not rev:
+            from .HgMergeDialog import HgMergeDialog
+            dlg = HgMergeDialog(self.hgGetTagsList(repodir),
+                                self.hgGetBranchesList(repodir),
+                                self.hgGetBookmarksList(repodir))
+            if dlg.exec_() == QDialog.Accepted:
+                rev, force = dlg.getParameters()
+            else:
+                return
         else:
-            return
+            force = False
         
         args = self.initCommand("merge")
         if force:

eric ide

mercurial