summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/Svn2.py
diff options
context:
space:
mode:
authorSol Jerome <sol.jerome@gmail.com>2012-03-24 11:20:07 -0500
committerSol Jerome <sol.jerome@gmail.com>2012-03-24 11:20:07 -0500
commitdab1d03d81c538966d03fb9318a4588a9e803b44 (patch)
treef51e27fa55887e9fb961766805fe43f0da56c5b9 /src/lib/Server/Plugins/Svn2.py
parent5cd6238df496a3cea178e4596ecd87967cce1ce6 (diff)
downloadbcfg2-dab1d03d81c538966d03fb9318a4588a9e803b44.tar.gz
bcfg2-dab1d03d81c538966d03fb9318a4588a9e803b44.tar.bz2
bcfg2-dab1d03d81c538966d03fb9318a4588a9e803b44.zip
Allow to run directly from a git checkout (#1037)
Signed-off-by: Sol Jerome <sol.jerome@gmail.com>
Diffstat (limited to 'src/lib/Server/Plugins/Svn2.py')
-rw-r--r--src/lib/Server/Plugins/Svn2.py125
1 files changed, 0 insertions, 125 deletions
diff --git a/src/lib/Server/Plugins/Svn2.py b/src/lib/Server/Plugins/Svn2.py
deleted file mode 100644
index 8d79348f8..000000000
--- a/src/lib/Server/Plugins/Svn2.py
+++ /dev/null
@@ -1,125 +0,0 @@
-try:
- import pysvn
- missing = False
-except:
- missing = True
-import Bcfg2.Server.Plugin
-
-class Svn2(Bcfg2.Server.Plugin.Plugin,
- Bcfg2.Server.Plugin.Version):
- """Svn is a version plugin for dealing with Bcfg2 repos."""
- name = 'Svn2'
- __author__ = 'bcfg-dev@mcs.anl.gov'
-
- conflicts = ['Svn']
- experimental = True
- __rmi__ = Bcfg2.Server.Plugin.Plugin.__rmi__ + ['Update','Commit']
-
- def __init__(self, core, datastore):
- Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore)
-
- if missing:
- self.logger.error("Svn2: Missing PySvn")
- raise Bcfg2.Server.Plugin.PluginInitError
-
- self.client = pysvn.Client()
-
- self.core = core
- self.datastore = datastore
- self.svn_root = None
- self.revision = None
-
- # Read revision from bcfg2 repo
- revision = self.get_revision()
- if not self.revision:
- raise Bcfg2.Server.Plugin.PluginInitError
-
- self.logger.debug("Initialized svn plugin with svn root %s at revision %s"
- % (self.svn_root, revision))
-
- def get_revision(self):
- """Read svn revision information for the Bcfg2 repository."""
- try:
- info = self.client.info(self.datastore)
- self.revision = info.revision
- self.svn_root = info.url
- return str(self.revision.number)
- except:
- self.logger.error("Svn2: Failed to get revision", exc_info=1)
- self.revision = None
- return str(-1)
-
- def commit_data(self, file_list, comment=None):
- """Commit changes into the repository"""
- if not comment:
- comment = 'Svn2: autocommit'
-
- # First try to update
- if not self.Update():
- self.logger.error("Failed to update svn repository, refusing to commit changes")
- return
-
- #FIXME - look for conflicts?
-
- for fname in file_list:
- stat = self.client.status(fname)
- self.client.add([f.path for f in stat \
- if f.text_status == pysvn.wc_status_kind.unversioned])
- try:
- self.revision = self.client.checkin([self.datastore], comment,
- recurse=True)
- self.revision = self.client.update(self.datastore, recurse=True)[0]
- self.logger.info("Svn2: Commited changes. At %s" %
- self.revision.number)
- except Exception, err:
- # try to be smart about the error we got back
- details = None
- if "callback_ssl_server_trust_prompt" in str(err):
- details = "SVN server certificate is not trusted"
- elif "callback_get_login" in str(err):
- details = "SVN credentials not cached"
-
- if details is None:
- self.logger.error("Svn2: Failed to commit changes",
- exc_info=1)
- else:
- self.logger.error("Svn2: Failed to commit changes: %s" %
- details)
-
- def Update(self):
- '''Svn2.Update() => True|False\nUpdate svn working copy\n'''
- try:
- old_revision = self.revision.number
- self.revision = self.client.update(self.datastore, recurse=True)[0]
- except Exception, err:
- # try to be smart about the error we got back
- details = None
- if "callback_ssl_server_trust_prompt" in str(err):
- details = "SVN server certificate is not trusted"
- elif "callback_get_login" in str(err):
- details = "SVN credentials not cached"
-
- if details is None:
- self.logger.error("Svn2: Failed to update server repository",
- exc_info=1)
- else:
- self.logger.error("Svn2: Failed to update server repository: %s" %
- details)
- return False
-
- if old_revision == self.revision.number:
- self.logger.debug("repository is current")
- else:
- self.logger.info("Updated %s from revision %s to %s" % \
- (self.datastore, old_revision, self.revision.number))
- return True
-
- def Commit(self):
- """Svn2.Commit() => True|False\nCommit svn repository\n"""
- try:
- self.commit_changes([])
- return True
- except:
- return False
-
-