src/eric7/Plugins/VcsPlugins/vcsMercurial/UncommitExtension/ProjectHelper.py

branch
eric7
changeset 11082
58838580274e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/VcsPlugins/vcsMercurial/UncommitExtension/ProjectHelper.py	Wed Dec 04 10:45:31 2024 +0100
@@ -0,0 +1,107 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the uncommit extension project helper.
+"""
+
+from PyQt6.QtCore import pyqtSlot
+from PyQt6.QtWidgets import QMenu
+
+from eric7.EricGui import EricPixmapCache
+from eric7.EricGui.EricAction import EricAction
+from eric7.EricWidgets import EricMessageBox
+
+from ..HgExtensionProjectHelper import HgExtensionProjectHelper
+
+
+class UncommitProjectHelper(HgExtensionProjectHelper):
+    """
+    Class implementing the uncommit extension project helper.
+    """
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+
+    def initActions(self):
+        """
+        Public method to generate the action objects.
+        """
+        self.hgUncommitAct = EricAction(
+            self.tr("Undo Local Commit"),
+            EricPixmapCache.getIcon("vcsUncommit"),
+            self.tr("Undo Local Commit"),
+            0,
+            0,
+            self,
+            "mercurial_uncommit",
+        )
+        self.hgUncommitAct.setStatusTip(self.tr("Undo the effect of a local commit."))
+        self.hgUncommitAct.setWhatsThis(
+            self.tr(
+                """<b>Undo Local Commit</b>"""
+                """<p>This undoes the effect of a local commit, returning the"""
+                """ affected files to their uncommitted state.</p>"""
+            )
+        )
+        self.hgUncommitAct.triggered.connect(self.__hgUncommit)
+        self.actions.append(self.hgUncommitAct)
+
+    def initMenu(self, mainMenu):
+        """
+        Public method to generate the extension menu.
+
+        @param mainMenu reference to the main menu
+        @type QMenu
+        @return populated menu
+        @rtype QMenu
+        """
+        menu = QMenu(self.menuTitle(), mainMenu)
+        menu.setIcon(EricPixmapCache.getIcon("vcsUncommit"))
+        menu.setTearOffEnabled(True)
+
+        menu.addAction(self.hgUncommitAct)
+
+        return menu
+
+    def menuTitle(self):
+        """
+        Public method to get the menu title.
+
+        @return title of the menu
+        @rtype str
+        """
+        return self.tr("Uncommit")
+
+    def __reopenProject(self, shouldReopen, title):
+        """
+        Private method to reopen the project if needed and wanted.
+
+        @param shouldReopen flag indicating that the project should
+            be reopened
+        @type bool
+        @param title title of the message box
+        @type str
+        """
+        if shouldReopen:
+            res = EricMessageBox.yesNo(
+                None,
+                title,
+                self.tr("""The project should be reread. Do this now?"""),
+                yesDefault=True,
+            )
+            if res:
+                self.project.reopenProject()
+
+    @pyqtSlot()
+    def __hgUncommit(self):
+        """
+        Private slot to undo a local commit.
+        """
+        shouldReopen = self.vcs.getExtensionObject("uncommit").hgUncommit()
+        self.__reopenProject(shouldReopen, self.tr("Undo Local Commit"))

eric ide

mercurial