eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py

changeset 7183
4ac1c9daa90b
parent 6942
2602857055c5
child 7188
f9c57c6fa7c4
diff -r 46ac11be8058 -r 4ac1c9daa90b eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py
--- a/eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Thu Aug 29 19:09:18 2019 +0200
+++ b/eric6/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Fri Aug 30 18:54:30 2019 +0200
@@ -192,6 +192,17 @@
             "Restores the selected missing files"))
         
         self.__actionsMenu.addSeparator()
+
+        self.__commitMergeAct = self.__actionsMenu.addAction(
+            self.tr("Commit Merge"), self.__commitMerge)
+        self.__commitMergeAct.setToolTip(self.tr("Commit all the merged"
+                                                 " changes."))
+        self.__abortMergeAct = self.__actionsMenu.addAction(
+            self.tr("Abort Merge"), self.__abortMerge)
+        self.__commitMergeAct.setToolTip(self.tr("Abort an uncommitted merge "
+                                                 "and lose all changes"))
+
+        self.__actionsMenu.addSeparator()
         
         act = self.__actionsMenu.addAction(
             self.tr("Adjust column sizes"), self.__resizeColumns)
@@ -201,7 +212,7 @@
         self.actionsButton.setIcon(
             UI.PixmapCache.getIcon("actionsToolButton.png"))
         self.actionsButton.setMenu(self.__actionsMenu)
-    
+
     def __actionsMenuHovered(self, action):
         """
         Private slot to show the tooltip for an action menu entry.
@@ -396,6 +407,8 @@
                 self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
                 
                 self.refreshButton.setEnabled(False)
+
+        self.statusList.setEnabled(not self.vcs.canCommitMerge(self.dname))
     
     def __finish(self):
         """
@@ -562,6 +575,8 @@
         """
         Private slot to refresh the status display.
         """
+        self.statusList.setEnabled(not self.vcs.canCommitMerge(self.dname))
+
         selectedItems = self.statusList.selectedItems()
         if len(selectedItems) == 1:
             self.__selectedName = selectedItems[0].text(self.__pathColumn)
@@ -601,28 +616,49 @@
         """
         Private slot to prepare the actions button menu before it is shown.
         """
-        modified = len(self.__getModifiedItems())
-        unversioned = len(self.__getUnversionedItems())
-        missing = len(self.__getMissingItems())
-        commitable = len(self.__getCommitableItems())
-        commitableUnselected = len(self.__getCommitableUnselectedItems())
+        if self.vcs.canCommitMerge(self.dname):
+            self.__commitMergeAct.setEnabled(True)
+            self.__abortMergeAct.setEnabled(True)
+
+            self.__addAct.setEnabled(False)
+            self.__diffAct.setEnabled(False)
+            self.__sbsDiffAct.setEnabled(False)
+            self.__revertAct.setEnabled(False)
+            self.__forgetAct.setEnabled(False)
+            self.__restoreAct.setEnabled(False)
+            self.__commitAct.setEnabled(False)
+            self.__commitSelectAct.setEnabled(False)
+            self.__commitDeselectAct.setEnabled(False)
+
+            self.__lfAddLargeAct.setEnabled(False)
+            self.__lfAddNormalAct.setEnabled(False)
+
+        else:
+            self.__commitMergeAct.setEnabled(False)
+            self.__abortMergeAct.setEnabled(False)
 
-        self.__addAct.setEnabled(unversioned)
-        self.__diffAct.setEnabled(modified)
-        self.__sbsDiffAct.setEnabled(modified == 1)
-        self.__revertAct.setEnabled(modified)
-        self.__forgetAct.setEnabled(missing)
-        self.__restoreAct.setEnabled(missing)
-        self.__commitAct.setEnabled(commitable)
-        self.__commitSelectAct.setEnabled(commitableUnselected)
-        self.__commitDeselectAct.setEnabled(commitable)
-        
-        if self.vcs.isExtensionActive("largefiles"):
-            enable = bool(unversioned)
-        else:
-            enable = False
-        self.__lfAddLargeAct.setEnabled(enable)
-        self.__lfAddNormalAct.setEnabled(enable)
+            modified = len(self.__getModifiedItems())
+            unversioned = len(self.__getUnversionedItems())
+            missing = len(self.__getMissingItems())
+            commitable = len(self.__getCommitableItems())
+            commitableUnselected = len(self.__getCommitableUnselectedItems())
+    
+            self.__addAct.setEnabled(unversioned)
+            self.__diffAct.setEnabled(modified)
+            self.__sbsDiffAct.setEnabled(modified == 1)
+            self.__revertAct.setEnabled(modified)
+            self.__forgetAct.setEnabled(missing)
+            self.__restoreAct.setEnabled(missing)
+            self.__commitAct.setEnabled(commitable)
+            self.__commitSelectAct.setEnabled(commitableUnselected)
+            self.__commitDeselectAct.setEnabled(commitable)
+            
+            if self.vcs.isExtensionActive("largefiles"):
+                enable = bool(unversioned)
+            else:
+                enable = False
+            self.__lfAddLargeAct.setEnabled(enable)
+            self.__lfAddNormalAct.setEnabled(enable)
     
     def __commit(self):
         """
@@ -895,6 +931,20 @@
                 else:
                     itm.setCheckState(self.__toBeCommittedColumn, Qt.Unchecked)
     
+    def __commitMerge(self):
+        """
+        Private slot to handle the Commit Merge context menu entry.
+        """
+        self.vcs.vcsCommit(self.dname, 'Merge', merge=True)
+        self.__committed()
+
+    def __abortMerge(self):
+        """
+        Private slot used to abort an uncommitted merge.
+        """
+        self.vcs.hgAbortMerge(self.dname)
+        self.__committed()
+
     ###########################################################################
     ## Diff handling methods below
     ###########################################################################

eric ide

mercurial