Adjusted test.py to use an installed vcs by default.
authorW. Trevor King <wking@drexel.edu>
Fri, 20 Nov 2009 19:29:01 +0000 (14:29 -0500)
committerW. Trevor King <wking@drexel.edu>
Fri, 20 Nov 2009 19:29:01 +0000 (14:29 -0500)
Protects agaist the off chance that the user doesn't have Arch (tla)
installed ;).

Changed Arch.name from "Arch" to "arch" so that each VCSs .name
matches the module name.  This allows us to use vcs.VCS_ORDER (a list
of module names) to set up the allowed values of BugDir.vcs_name.

becommands/init.py
libbe/arch.py
libbe/bugdir.py
libbe/vcs.py
test.py

index 275dd77e809e338a3bb8f99263678f0c3c6e0955..75db0acf9673c5db8bcf341fc7bc380770b0c7ea 100644 (file)
@@ -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)
index 468755532fec24716c379cbd796878fb617c77d2..48129b5bb88bddb70ee8c16dcf9b75b163ad6ca5 100644 (file)
@@ -45,7 +45,7 @@ def new():
     return Arch()
 
 class Arch(vcs.VCS):
-    name = "Arch"
+    name = "arch"
     client = client
     versioned = True
     _archive_name = None
index 5b942d350e9d45887df43c14ca6bb75676c3b783..675b7446442c214a6b2fe5a176b9bafaeea5a882 100644 (file)
@@ -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):
index be2884684fe2755095d1f76e892fb5c2ff657f1c..b1fd1141a0ffc568a060ce06a9ba9ed36ba91434 100644 (file)
@@ -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 1f1ffcfd804889b85ce17932f4e80485420e2140..57091c79ca7be177f830b46193febf0275640335 100644 (file)
--- 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)