src/eric7/Plugins/PluginVcsPySvn.py

branch
eric7
changeset 9209
b99e7fd55fd3
parent 8881
54e42bc2437a
child 9221
bf71ee032bb4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/PluginVcsPySvn.py	Thu Jul 07 11:23:56 2022 +0200
@@ -0,0 +1,279 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2007 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the PySvn version control plugin.
+"""
+
+import os
+import contextlib
+
+from PyQt6.QtCore import QObject, QCoreApplication
+
+from EricWidgets.EricApplication import ericApp
+
+import Preferences
+from Preferences.Shortcuts import readShortcuts
+import UI.Info
+
+from VcsPlugins.vcsPySvn.SvnUtilities import getConfigPath, getServersPath
+
+# Start-Of-Header
+name = "PySvn Plugin"
+author = "Detlev Offenbach <detlev@die-offenbachs.de>"
+autoactivate = False
+deactivateable = True
+version = UI.Info.VersionOnly
+pluginType = "version_control"
+pluginTypename = "PySvn"
+className = "VcsPySvnPlugin"
+packageName = "__core__"
+shortDescription = "Implements the PySvn version control interface."
+longDescription = (
+    """This plugin provides the PySvn version control interface."""
+)
+pyqtApi = 2
+# End-Of-Header
+
+error = ""
+
+
+def exeDisplayData():
+    """
+    Public method to support the display of some executable info.
+    
+    @return dictionary containing the data to be shown
+    """
+    try:
+        import pysvn
+        try:
+            text = os.path.dirname(pysvn.__file__)
+        except AttributeError:
+            text = "PySvn"
+        version = ".".join([str(v) for v in pysvn.version])
+    except ImportError:
+        text = "PySvn"
+        version = ""
+    
+    data = {
+        "programEntry": False,
+        "header": QCoreApplication.translate(
+            "VcsPySvnPlugin", "Version Control - Subversion (pysvn)"),
+        "text": text,
+        "version": version,
+    }
+    
+    return data
+
+
+def getVcsSystemIndicator():
+    """
+    Public function to get the indicators for this version control system.
+    
+    @return dictionary with indicator as key and a tuple with the vcs name
+        (string) and vcs display string (string)
+    """
+    global pluginTypename
+    data = {}
+    data[".svn"] = (pluginTypename, displayString())
+    data["_svn"] = (pluginTypename, displayString())
+    return data
+
+
+def displayString():
+    """
+    Public function to get the display string.
+    
+    @return display string (string)
+    """
+    try:
+        import pysvn        # __IGNORE_WARNING__
+        return QCoreApplication.translate('VcsPySvnPlugin',
+                                          'Subversion (pysvn)')
+    except ImportError:
+        return ""
+
+subversionCfgPluginObject = None
+
+
+def createConfigurationPage(configDlg):
+    """
+    Module function to create the configuration page.
+    
+    @param configDlg reference to the configuration dialog (QDialog)
+    @return reference to the configuration page
+    """
+    global subversionCfgPluginObject
+    from VcsPlugins.vcsPySvn.ConfigurationPage.SubversionPage import (
+        SubversionPage
+    )
+    if subversionCfgPluginObject is None:
+        subversionCfgPluginObject = VcsPySvnPlugin(None)
+    page = SubversionPage(subversionCfgPluginObject)
+    return page
+    
+
+def getConfigData():
+    """
+    Module function returning data as required by the configuration dialog.
+    
+    @return dictionary with key "zzz_subversionPage" containing the relevant
+    data
+    """
+    return {
+        "zzz_subversionPage":
+        [QCoreApplication.translate("VcsPySvnPlugin", "Subversion"),
+         os.path.join("VcsPlugins", "vcsPySvn", "icons",
+                      "preferences-subversion.svg"),
+         createConfigurationPage, "vcsPage", None],
+    }
+
+
+def prepareUninstall():
+    """
+    Module function to prepare for an uninstallation.
+    """
+    if not ericApp().getObject("PluginManager").isPluginLoaded(
+            "PluginVcsSubversion"):
+        Preferences.getSettings().remove("Subversion")
+    
+
+class VcsPySvnPlugin(QObject):
+    """
+    Class implementing the PySvn version control plugin.
+    """
+    def __init__(self, ui):
+        """
+        Constructor
+        
+        @param ui reference to the user interface object (UI.UserInterface)
+        """
+        super().__init__(ui)
+        self.__ui = ui
+        
+        self.__subversionDefaults = {
+            "StopLogOnCopy": 1,
+            "LogLimit": 20,
+        }
+        
+        from VcsPlugins.vcsPySvn.ProjectHelper import PySvnProjectHelper
+        self.__projectHelperObject = PySvnProjectHelper(None, None)
+        with contextlib.suppress(KeyError):
+            ericApp().registerPluginObject(
+                pluginTypename, self.__projectHelperObject, pluginType)
+        readShortcuts(pluginName=pluginTypename)
+    
+    def getProjectHelper(self):
+        """
+        Public method to get a reference to the project helper object.
+        
+        @return reference to the project helper object
+        """
+        return self.__projectHelperObject
+
+    def initToolbar(self, ui, toolbarManager):
+        """
+        Public slot to initialize the VCS toolbar.
+        
+        @param ui reference to the main window (UserInterface)
+        @param toolbarManager reference to a toolbar manager object
+            (EricToolBarManager)
+        """
+        if self.__projectHelperObject:
+            self.__projectHelperObject.initToolbar(ui, toolbarManager)
+    
+    def activate(self):
+        """
+        Public method to activate this plugin.
+        
+        @return tuple of reference to instantiated viewmanager and
+            activation status (boolean)
+        """
+        from VcsPlugins.vcsPySvn.subversion import Subversion
+        self.__object = Subversion(self, self.__ui)
+        
+        tb = self.__ui.getToolbar("vcs")[1]
+        tb.setVisible(False)
+        tb.setEnabled(False)
+        
+        tb = self.__ui.getToolbar("pysvn")[1]
+        tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
+        tb.setEnabled(True)
+        
+        return self.__object, True
+    
+    def deactivate(self):
+        """
+        Public method to deactivate this plugin.
+        """
+        self.__object = None
+        
+        tb = self.__ui.getToolbar("pysvn")[1]
+        tb.setVisible(False)
+        tb.setEnabled(False)
+        
+        tb = self.__ui.getToolbar("vcs")[1]
+        tb.setVisible(Preferences.getVCS("ShowVcsToolbar"))
+        tb.setEnabled(True)
+    
+    def getPreferences(self, key):
+        """
+        Public method to retrieve the various settings.
+        
+        @param key the key of the value to get
+        @return the requested refactoring setting
+        """
+        if key in ["StopLogOnCopy"]:
+            return Preferences.toBool(Preferences.getSettings().value(
+                "Subversion/" + key, self.__subversionDefaults[key]))
+        elif key in ["LogLimit"]:
+            return int(Preferences.getSettings().value(
+                "Subversion/" + key,
+                self.__subversionDefaults[key]))
+        elif key in ["Commits"]:
+            return Preferences.toList(Preferences.getSettings().value(
+                "Subversion/" + key))
+        else:
+            return Preferences.getSettings().value("Subversion/" + key)
+    
+    def setPreferences(self, key, value):
+        """
+        Public method to store the various settings.
+        
+        @param key the key of the setting to be set
+        @param value the value to be set
+        """
+        Preferences.getSettings().setValue("Subversion/" + key, value)
+    
+    def getServersPath(self):
+        """
+        Public method to get the filename of the servers file.
+        
+        @return filename of the servers file (string)
+        """
+        return getServersPath()
+    
+    def getConfigPath(self):
+        """
+        Public method to get the filename of the config file.
+        
+        @return filename of the config file (string)
+        """
+        return getConfigPath()
+    
+    def prepareUninstall(self):
+        """
+        Public method to prepare for an uninstallation.
+        """
+        ericApp().unregisterPluginObject(pluginTypename)
+    
+    def prepareUnload(self):
+        """
+        Public method to prepare for an unload.
+        """
+        if self.__projectHelperObject:
+            self.__projectHelperObject.removeToolbar(
+                self.__ui, ericApp().getObject("ToolbarManager"))
+        ericApp().unregisterPluginObject(pluginTypename)

eric ide

mercurial