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 ###########################################################################