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

Fri, 02 May 2025 16:19:35 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 02 May 2025 16:19:35 +0200
branch
eric7
changeset 11255
1c2bd52f2002
parent 11082
58838580274e
permissions
-rw-r--r--

Added code to suppress some output needed during development when the application is operated in release mode.

11082
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the uncommit extension project browser helper.
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtCore import pyqtSlot
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtWidgets import QMenu
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from eric7.EricGui import EricPixmapCache
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from eric7.EricWidgets import EricMessageBox
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from ..HgExtensionProjectBrowserHelper import HgExtensionProjectBrowserHelper
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 class UncommitProjectBrowserHelper(HgExtensionProjectBrowserHelper):
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 Class implementing the uncommit extension project browser helper.
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 def __init__(self, vcsObject, browserObject, projectObject):
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 Constructor
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @param vcsObject reference to the vcs object
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @type Hg
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param browserObject reference to the project browser object
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @type ProjectBaseBrowser
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @param projectObject reference to the project object
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @type Project
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 super().__init__(vcsObject, browserObject, projectObject)
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 def initMenus(self):
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Public method to generate the extension menus.
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @return dictionary of populated menu. The dict must have the keys 'mainMenu',
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 'multiMenu', 'backMenu', 'dirMenu' and 'dirMultiMenu'.
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @rtype dict of QMenu
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.__menus = {}
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 menu = QMenu(self.menuTitle())
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 menu.setIcon(EricPixmapCache.getIcon("vcsUncommit"))
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 menu.setTearOffEnabled(True)
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 menu.addAction(
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 EricPixmapCache.getIcon("vcsUncommit"),
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.tr("Undo Local Commit"),
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.__hgUncommit,
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 )
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.__menus["mainMenu"] = menu
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 menu = QMenu(self.menuTitle())
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 menu.setIcon(EricPixmapCache.getIcon("vcsUncommit"))
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 menu.setTearOffEnabled(True)
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 menu.addAction(
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 EricPixmapCache.getIcon("vcsUncommit"),
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 self.tr("Undo Local Commit"),
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.__hgUncommit,
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 )
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.__menus["multiMenu"] = menu
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 menu = QMenu(self.menuTitle())
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 menu.setIcon(EricPixmapCache.getIcon("vcsUncommit"))
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 menu.setTearOffEnabled(True)
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 menu.addAction(
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 EricPixmapCache.getIcon("vcsUncommit"),
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 self.tr("Undo Local Commit"),
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__hgUncommit,
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 )
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.__menus["dirMenu"] = menu
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 menu = QMenu(self.menuTitle())
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 menu.setIcon(EricPixmapCache.getIcon("vcsUncommit"))
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 menu.setTearOffEnabled(True)
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 menu.addAction(
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 EricPixmapCache.getIcon("vcsUncommit"),
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 self.tr("Undo Local Commit"),
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.__hgUncommit,
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 )
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.__menus["dirMultiMenu"] = menu
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 return self.__menus
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 def menuTitle(self):
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 Public method to get the menu title.
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 @return title of the menu
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 @rtype str
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 return self.tr("Uncommit")
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 def showMenu(self, key, controlled):
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 Public method to prepare the extension menu for display.
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 @param key menu key (one of 'mainMenu', 'multiMenu', 'backMenu', 'dirMenu'
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 or 'dirMultiMenu')
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 @type str
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 @param controlled flag indicating to prepare the menu for a
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 version controlled entry or a non-version controlled entry
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 @type bool
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 if key in self.__menus:
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self.__menus[key].setEnabled(controlled)
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 def __reopenProject(self, shouldReopen, title):
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 Private method to reopen the project if needed and wanted.
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 @param shouldReopen flag indicating that the project should
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 be reopened
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 @type bool
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 @param title title of the message box
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 @type str
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 if shouldReopen:
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 res = EricMessageBox.yesNo(
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 None,
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 title,
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 self.tr("""The project should be reread. Do this now?"""),
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 yesDefault=True,
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 )
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 if res:
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 self.project.reopenProject()
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 @pyqtSlot()
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 def __hgUncommit(self):
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 Private slot to undo the effect of a local commit.
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 """
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 names = []
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 for itm in self.browser.getSelectedItems():
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 try:
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 name = itm.fileName()
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 except AttributeError:
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 name = itm.dirName()
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 names.append(name)
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 shouldReopen = self.vcs.getExtensionObject("uncommit").hgUncommit(names)
58838580274e Mercurial Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 self.__reopenProject(shouldReopen, self.tr("Undo Local Commit"))

eric ide

mercurial