summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Strauss <david@fourkitchens.com>2009-11-05 10:21:30 +0000
committerDavid Strauss <david@fourkitchens.com>2009-11-05 10:21:30 +0000
commitf93d59641f6423cf9d09d115e58f3f56d7d13978 (patch)
treed327d5445b4889a76aeb61183986654ddee713bf
parentf5d571cade2c25a3c92a0e8b5b4d0350a21b5d01 (diff)
downloadbcfg2-f93d59641f6423cf9d09d115e58f3f56d7d13978.tar.gz
bcfg2-f93d59641f6423cf9d09d115e58f3f56d7d13978.tar.bz2
bcfg2-f93d59641f6423cf9d09d115e58f3f56d7d13978.zip
Bzr: Finally use the bzrlib API for real. This is much cleaner, and it should end any interprocess communication issues. Because it's easy, also append a plus sign if there are local changes to the working tree.
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5540 ce84e21b-d406-0410-9b95-82705330c041
-rw-r--r--src/lib/Server/Plugins/Bzr.py32
1 files changed, 11 insertions, 21 deletions
diff --git a/src/lib/Server/Plugins/Bzr.py b/src/lib/Server/Plugins/Bzr.py
index c0bfef64f..5886ddba9 100644
--- a/src/lib/Server/Plugins/Bzr.py
+++ b/src/lib/Server/Plugins/Bzr.py
@@ -1,6 +1,6 @@
-import os
-from subprocess import Popen, PIPE
import Bcfg2.Server.Plugin
+from bzrlib.workingtree import WorkingTree
+from bzrlib import errors
# for debugging output only
import logging
@@ -17,29 +17,19 @@ class Bzr(Bcfg2.Server.Plugin.Plugin,
self.core = core
self.datastore = datastore
- # path to bzr directory for bcfg2 repo
- bzr_dir = "%s/.bzr" % datastore
-
# Read revision from bcfg2 repo
- if os.path.isdir(bzr_dir):
- revision = self.get_revision()
- else:
- logger.error("%s is not a directory" % bzr_dir)
- raise Bcfg2.Server.Plugin.PluginInitError
+ revision = self.get_revision()
- logger.debug("Initialized Bazaar plugin with directory = %(dir)s at revision = %(rev)s" % {'dir': bzr_dir, 'rev': revision})
+ logger.debug("Initialized Bazaar plugin with directory = %(dir)s at revision = %(rev)s" % {'dir': datastore, 'rev': revision})
def get_revision(self):
- '''Read Bazaar revision information for the bcfg2 repository'''
+ '''Read Bazaar revision information for the BCFG2 repository'''
try:
- data = Popen(("env LC_ALL=C bzr revno %s" %
- (self.datastore)), shell=True,
- stdout=PIPE).communicate()[0].split('\n')
- revision = data[0]
- except IndexError:
- logger.error("Failed to read bzr revno; disabling Bazaar support")
- logger.error('''Ran command "bzr revno %s"''' % \
- (self.datastore))
- logger.error("Got output: %s" % data)
+ working_tree = WorkingTree.open(self.datastore)
+ revision = str(working_tree.branch.revno())
+ if working_tree.changes_from(working_tree.basis_tree()).has_changed:
+ revision += "+"
+ except errors.NotBranchError:
+ logger.error("Failed to read Bazaar branch; disabling Bazaar support")
raise Bcfg2.Server.Plugin.PluginInitError
return revision