summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Ulrich Niedermann <hun@n-dimensional.de>2007-12-09 04:42:58 +0100
committerHans Ulrich Niedermann <hun@n-dimensional.de>2007-12-09 04:42:58 +0100
commit003eb1479a4ac94eda1f6e3aa028abc00b949f91 (patch)
treec233cc4cb6e7ff571c0669b00bcbe82256d618bf
parenta284de07d8ab58d42e256cc0912625a18bd179d4 (diff)
Detect bzr source tree
-rw-r--r--nbb/nbb_lib.in30
1 files changed, 25 insertions, 5 deletions
diff --git a/nbb/nbb_lib.in b/nbb/nbb_lib.in
index cfe3428..03cddaa 100644
--- a/nbb/nbb_lib.in
+++ b/nbb/nbb_lib.in
@@ -14,21 +14,41 @@ def prog_stdout(call_list):
stdout, stderr = p.communicate()
return stdout.strip()
+class NotASourceTree(Exception):
+ pass
+
class GitSourceTree(object):
def __init__(self, srcdir):
if "true" != prog_stdout(["git", "rev-parse", "--is-inside-work-tree"]):
raise "Not a git sourcetree"
- self.top_srcdir = os.path.join(srcdir,
+ self.top_srcdir = os.path.join(srcdir, FIXME)
srctree_classes.append(GitSourceTree)
+class BzrSourceTree(object):
+ def __init__(self, srcdir):
+ try:
+ import bzrlib.workingtree
+ wt,b = bzrlib.workingtree.WorkingTree.open_containing(".")
+ except ImportError:
+ raise NotASourceTree()
+ self.wt = wt
+
+srctree_classes.append(BzrSourceTree)
+
def get_sourcetree(srcdir):
- for cls in srctree_classes:
+ def moo(cls):
try:
return cls(srcdir)
- except "Moo":
- pass
- raise "Source tree type for '%s' not detected" % (srcdir,)
+ except NotASourceTree():
+ return None
+ tmp = map(moo, srctree_classes)
+ srctrees = filter(lambda x: not x == None, tmp)
+ if len(srctrees) > 1:
+ raise "More than one source tree type detected for '%s'" % (srcdir,)
+ elif len(srctrees) < 1:
+ raise "Source tree type for '%s' not detected" % (srcdir,)
+ return srctrees[0]
class NBB(object):
def __init__(self):