diff options
-rw-r--r-- | src/lib/Server/Plugins/Bzr.py | 32 |
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 |