eric7/Plugins/PluginVcsPySvn.py

branch
eric7
changeset 8312
800c432b34c8
parent 8240
93b8a353c4bf
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2007 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the PySvn version control plugin.
8 """
9
10 import os
11 import contextlib
12
13 from PyQt5.QtCore import QObject, QCoreApplication
14
15 from E5Gui.E5Application import e5App
16
17 import Preferences
18 from Preferences.Shortcuts import readShortcuts
19 import UI.Info
20
21 from VcsPlugins.vcsPySvn.SvnUtilities import getConfigPath, getServersPath
22
23 # Start-Of-Header
24 name = "PySvn Plugin"
25 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
26 autoactivate = False
27 deactivateable = True
28 version = UI.Info.VersionOnly
29 pluginType = "version_control"
30 pluginTypename = "PySvn"
31 className = "VcsPySvnPlugin"
32 packageName = "__core__"
33 shortDescription = "Implements the PySvn version control interface."
34 longDescription = (
35 """This plugin provides the PySvn version control interface."""
36 )
37 pyqtApi = 2
38 # End-Of-Header
39
40 error = ""
41
42
43 def exeDisplayData():
44 """
45 Public method to support the display of some executable info.
46
47 @return dictionary containing the data to be shown
48 """
49 try:
50 import pysvn
51 try:
52 text = os.path.dirname(pysvn.__file__)
53 except AttributeError:
54 text = "PySvn"
55 version = ".".join([str(v) for v in pysvn.version])
56 except ImportError:
57 text = "PySvn"
58 version = ""
59
60 data = {
61 "programEntry": False,
62 "header": QCoreApplication.translate(
63 "VcsPySvnPlugin", "Version Control - Subversion (pysvn)"),
64 "text": text,
65 "version": version,
66 }
67
68 return data
69
70
71 def getVcsSystemIndicator():
72 """
73 Public function to get the indicators for this version control system.
74
75 @return dictionary with indicator as key and a tuple with the vcs name
76 (string) and vcs display string (string)
77 """
78 global pluginTypename
79 data = {}
80 data[".svn"] = (pluginTypename, displayString())
81 data["_svn"] = (pluginTypename, displayString())
82 return data
83
84
85 def displayString():
86 """
87 Public function to get the display string.
88
89 @return display string (string)
90 """
91 try:
92 import pysvn # __IGNORE_WARNING__
93 return QCoreApplication.translate('VcsPySvnPlugin',
94 'Subversion (pysvn)')
95 except ImportError:
96 return ""
97
98 subversionCfgPluginObject = None
99
100
101 def createConfigurationPage(configDlg):
102 """
103 Module function to create the configuration page.
104
105 @param configDlg reference to the configuration dialog (QDialog)
106 @return reference to the configuration page
107 """
108 global subversionCfgPluginObject
109 from VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPage import (
110 SubversionPage
111 )
112 if subversionCfgPluginObject is None:
113 subversionCfgPluginObject = VcsPySvnPlugin(None)
114 page = SubversionPage(subversionCfgPluginObject)
115 return page
116
117
118 def getConfigData():
119 """
120 Module function returning data as required by the configuration dialog.
121
122 @return dictionary with key "zzz_subversionPage" containing the relevant
123 data
124 """
125 return {
126 "zzz_subversionPage":
127 [QCoreApplication.translate("VcsPySvnPlugin", "Subversion"),
128 os.path.join("VcsPlugins", "vcsPySvn", "icons",
129 "preferences-subversion.svg"),
130 createConfigurationPage, "vcsPage", None],
131 }
132
133
134 def prepareUninstall():
135 """
136 Module function to prepare for an uninstallation.
137 """
138 if not e5App().getObject("PluginManager").isPluginLoaded(
139 "PluginVcsSubversion"):
140 Preferences.Prefs.settings.remove("Subversion")
141
142
143 class VcsPySvnPlugin(QObject):
144 """
145 Class implementing the PySvn version control plugin.
146 """
147 def __init__(self, ui):
148 """
149 Constructor
150
151 @param ui reference to the user interface object (UI.UserInterface)
152 """
153 super().__init__(ui)
154 self.__ui = ui
155
156 self.__subversionDefaults = {
157 "StopLogOnCopy": 1,
158 "LogLimit": 20,
159 "CommitMessages": 20,
160 }
161
162 from VcsPlugins.vcsPySvn.ProjectHelper import PySvnProjectHelper
163 self.__projectHelperObject = PySvnProjectHelper(None, None)
164 with contextlib.suppress(KeyError):
165 e5App().registerPluginObject(
166 pluginTypename, self.__projectHelperObject, pluginType)
167 readShortcuts(pluginName=pluginTypename)
168
169 def getProjectHelper(self):
170 """
171 Public method to get a reference to the project helper object.
172
173 @return reference to the project helper object
174 """
175 return self.__projectHelperObject
176
177 def initToolbar(self, ui, toolbarManager):
178 """
179 Public slot to initialize the VCS toolbar.
180
181 @param ui reference to the main window (UserInterface)
182 @param toolbarManager reference to a toolbar manager object
183 (E5ToolBarManager)
184 """
185 if self.__projectHelperObject:
186 self.__projectHelperObject.initToolbar(ui, toolbarManager)
187
188 def activate(self):
189 """
190 Public method to activate this plugin.
191
192 @return tuple of reference to instantiated viewmanager and
193 activation status (boolean)
194 """
195 from VcsPlugins.vcsPySvn.subversion import Subversion
196 self.__object = Subversion(self, self.__ui)
197
198 tb = self.__ui.getToolbar("vcs")[1]
199 tb.setVisible(False)
200 tb.setEnabled(False)
201
202 tb = self.__ui.getToolbar("pysvn")[1]
203 tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
204 tb.setEnabled(True)
205
206 return self.__object, True
207
208 def deactivate(self):
209 """
210 Public method to deactivate this plugin.
211 """
212 self.__object = None
213
214 tb = self.__ui.getToolbar("pysvn")[1]
215 tb.setVisible(False)
216 tb.setEnabled(False)
217
218 tb = self.__ui.getToolbar("vcs")[1]
219 tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
220 tb.setEnabled(True)
221
222 def getPreferences(self, key):
223 """
224 Public method to retrieve the various settings.
225
226 @param key the key of the value to get
227 @return the requested refactoring setting
228 """
229 if key in ["StopLogOnCopy"]:
230 return Preferences.toBool(Preferences.Prefs.settings.value(
231 "Subversion/" + key, self.__subversionDefaults[key]))
232 elif key in ["LogLimit", "CommitMessages"]:
233 return int(Preferences.Prefs.settings.value(
234 "Subversion/" + key,
235 self.__subversionDefaults[key]))
236 elif key in ["Commits"]:
237 return Preferences.toList(Preferences.Prefs.settings.value(
238 "Subversion/" + key))
239 else:
240 return Preferences.Prefs.settings.value("Subversion/" + key)
241
242 def setPreferences(self, key, value):
243 """
244 Public method to store the various settings.
245
246 @param key the key of the setting to be set
247 @param value the value to be set
248 """
249 Preferences.Prefs.settings.setValue("Subversion/" + key, value)
250
251 def getServersPath(self):
252 """
253 Public method to get the filename of the servers file.
254
255 @return filename of the servers file (string)
256 """
257 return getServersPath()
258
259 def getConfigPath(self):
260 """
261 Public method to get the filename of the config file.
262
263 @return filename of the config file (string)
264 """
265 return getConfigPath()
266
267 def prepareUninstall(self):
268 """
269 Public method to prepare for an uninstallation.
270 """
271 e5App().unregisterPluginObject(pluginTypename)
272
273 def prepareUnload(self):
274 """
275 Public method to prepare for an unload.
276 """
277 if self.__projectHelperObject:
278 self.__projectHelperObject.removeToolbar(
279 self.__ui, e5App().getObject("ToolbarManager"))
280 e5App().unregisterPluginObject(pluginTypename)

eric ide

mercurial