aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--becommands/init.py13
-rw-r--r--libbe/arch.py2
-rw-r--r--libbe/bugdir.py2
-rw-r--r--libbe/vcs.py23
-rw-r--r--test.py9
5 files changed, 30 insertions, 19 deletions
diff --git a/becommands/init.py b/becommands/init.py
index 275dd77..75db0ac 100644
--- a/becommands/init.py
+++ b/becommands/init.py
@@ -37,14 +37,13 @@ def execute(args, manipulate_encodings=True):
>>> dir = utility.Dir()
>>> os.chdir(dir.path)
- >>> vcs = vcs.installed_vcs()
- >>> vcs.init('.')
- >>> print vcs.name
- Arch
- >>> execute([], manipulate_encodings=False)
- Using Arch for revision control.
+ >>> _vcs = vcs.installed_vcs()
+ >>> _vcs.init('.')
+ >>> _vcs.name in vcs.VCS_ORDER
+ >>> execute([], manipulate_encodings=False) # doctest: +ELLIPSIS
+ Using ... for revision control.
Directory initialized.
- >>> vcs.cleanup()
+ >>> _vcs.cleanup()
>>> try:
... execute(['--root', '.'], manipulate_encodings=False)
diff --git a/libbe/arch.py b/libbe/arch.py
index 4687555..48129b5 100644
--- a/libbe/arch.py
+++ b/libbe/arch.py
@@ -45,7 +45,7 @@ def new():
return Arch()
class Arch(vcs.VCS):
- name = "Arch"
+ name = "arch"
client = client
versioned = True
_archive_name = None
diff --git a/libbe/bugdir.py b/libbe/bugdir.py
index 5b942d3..675b744 100644
--- a/libbe/bugdir.py
+++ b/libbe/bugdir.py
@@ -213,7 +213,7 @@ that the Arch VCS backend *enforces* ids with this format.""",
settings easy. Don't set this attribute. Set .vcs instead, and
.vcs_name will be automatically adjusted.""",
default="None",
- allowed=["None", "Arch", "bzr", "darcs", "git", "hg"])
+ allowed=["None"]+vcs.VCS_ORDER)
def vcs_name(): return {}
def _get_vcs(self, vcs_name=None):
diff --git a/libbe/vcs.py b/libbe/vcs.py
index be28846..b1fd114 100644
--- a/libbe/vcs.py
+++ b/libbe/vcs.py
@@ -38,16 +38,23 @@ import doctest
from utility import Dir, search_parent_directories
from subproc import CommandError, invoke
+from plugin import get_plugin
+# List VCS modules in order of preference.
+# Don't list this module, it is implicitly last.
+VCS_ORDER = ['arch', 'bzr', 'darcs', 'git', 'hg']
+
+def set_preferred_vcs(name):
+ global VCS_ORDER
+ assert name in VCS_ORDER, \
+ 'unrecognized VCS %s not in\n %s' % (name, VCS_ORDER)
+ VCS_ORDER.remove(name)
+ VCS_ORDER.insert(0, name)
def _get_matching_vcs(matchfn):
"""Return the first module for which matchfn(VCS_instance) is true"""
- import arch
- import bzr
- import darcs
- import git
- import hg
- for module in [arch, bzr, darcs, git, hg]:
+ for submodname in VCS_ORDER:
+ module = get_plugin('libbe', submodname)
vcs = module.new()
if matchfn(vcs) == True:
return vcs
@@ -117,6 +124,10 @@ class VCS(object):
self._duplicateDirname = None
self.encoding = encoding
self.version = self._get_version()
+ def __str__(self):
+ return "<%s %s>" % (self.__class__.__name__, id(self))
+ def __repr__(self):
+ return str(self)
def _vcs_version(self):
"""
Return the VCS version string.
diff --git a/test.py b/test.py
index 1f1ffcf..57091c7 100644
--- a/test.py
+++ b/test.py
@@ -8,7 +8,7 @@ When called with module name arguments, only run the doctests from
those modules.
"""
-from libbe import plugin
+from libbe import plugin, vcs
import unittest
import doctest
import sys
@@ -41,9 +41,10 @@ else:
for modname,module in plugin.iter_plugins("becommands"):
suite.addTest(doctest.DocTestSuite(module))
-#for s in suite._tests:
-# print s
-#exit(0)
+_vcs = vcs.installed_vcs()
+vcs.set_preferred_vcs(_vcs.name)
+print 'Using %s as the testing VCS' % _vcs.name
+
result = unittest.TextTestRunner(verbosity=2).run(suite)
numErrors = len(result.errors)