Source code for pyjen.plugins.subversion

"""Module defining the interfaces for interacting with Subversion properties
associated with a :py:mod:`pyjen.job.Job`"""
from pyjen.utils.xml_plugin import XMLPlugin


[docs]class Subversion(XMLPlugin): """Subversion SCM job plugin https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin """ @property def locations(self): """Gets the list of SVN URLs associated with this plugin instance :returns: set of 0 or more ModuleLocation objects describing the SVN parameters for this module. :rtype: :class:`list` of :class:`ModuleLocation` objects """ retval = list() locations_node = self._root.find("locations") for loc in locations_node: retval.append(ModuleLocation(loc)) return retval @property def included_regions(self): """patterns of the regions of the SVN repo to include in SCM operations :rtype: :class:`list` of :class:`str` """ temp = self._root.find("includedRegions").text if temp is None: return [] return temp.split() @included_regions.setter def included_regions(self, new_regions): """patterns of regions in an SVN repo to include in SCM operations :param list new_regions: list of paths to include in SCM operations """ self._root.find("includedRegions").text = "\n".join(new_regions) # --------------------------------------------------------------- PLUGIN API
[docs] @staticmethod def get_jenkins_plugin_name(): """Gets the name of the Jenkins plugin associated with this PyJen plugin This static method is used by the PyJen plugin API to associate this class with a specific Jenkins plugin, as it is encoded in the config.xml :rtype: :class:`str` """ return "subversion"
[docs]class ModuleLocation(XMLPlugin): """Interface to SCM module declarations in a Subversion property of a job""" @property def node(self): """Gets the XML node associated with this plugin :rtype: :class:`ElementTree.Element` """ return self._root @property def url(self): """SVN URL where the source code for this module can be found :rtype: :class:`str` """ return self._root.find('remote').text @url.setter def url(self, new_url): """Sets the SVN URL where the source code for this module can be found :param str new_url: the SVN URL where the source code for this module can be found """ self._root.find('remote').text = new_url @property def local_dir(self): """local folder where the source code for this module is checked out to :rtype: :class:`str` """ return self._root.find('local').text @local_dir.setter def local_dir(self, new_dir): """Sets the local folder to checkout the source code for this module :param str new_dir: New, relative path within the workspace to checkout the source for this module """ self._root.find('local').text = new_dir @property def depth_option(self): """ :returns: the current SVN 'depth' options associated with this module :rtype: :class:`str` """ return self._root.find('depthOption').text @property def ignore_externals(self): """see whether the 'ignore externals' option is enabled on this job :returns: True if ignore externals is enabled, otherwise False :rtype: :class:`bool` """ temp = self._root.find('ignoreExternalsOption').text assert temp.lower() == "true" or temp.lower() == "false" return temp.lower() == "true"
[docs] def enable_ignore_externals(self): """Enables the 'ignore externals' option on this SCM module""" self._root.find('ignoreExternalsOption').text = "true"
[docs] def disable_ignore_externals(self): """Disables the 'ignore externals' option on this SCM module""" self._root.find('ignoreExternalsOption').text = "false"
PluginClass = Subversion if __name__ == "__main__": # pragma: no cover pass