[patch] fixes for test case get_url, make_branch, etc
Martin Pool
mbp at canonical.com
Thu Jul 27 08:43:12 BST 2006
Thanks to Robert and Andrew for pairing on this.
This fixes a few url/path inconsistencies in the test case get_url(),
make_branch(), etc. There is still (as the comments say) an outstanding
bug that get_url doesn't really return a URL, but this fixes some things
that made it hard to test the smart server.
It's not crucial for 0.9 but I think it'd be good, so seeking +1s.
--
Martin
-------------- next part --------------
=== modified file 'bzrlib/tests/__init__.py'
--- bzrlib/tests/__init__.py 2006-07-25 00:58:17 +0000
+++ bzrlib/tests/__init__.py 2006-07-27 07:38:38 +0000
@@ -1072,7 +1072,7 @@
return self.__server
def get_url(self, relpath=None):
- """Get a URL for the readwrite transport.
+ """Get a URL (or maybe a path) for the readwrite transport.
This will either be backed by '.' or to an equivalent non-file based
facility.
@@ -1083,7 +1083,14 @@
if relpath is not None and relpath != '.':
if not base.endswith('/'):
base = base + '/'
- base = base + urlutils.escape(relpath)
+ # XXX: Really base should be a url; we did after all call
+ # get_url()! But sometimes it's just a path (from
+ # LocalAbspathServer), and it'd be wrong to append urlescaped data
+ # to a non-escaped local path.
+ if base.startswith('./') or base.startswith('/'):
+ base += relpath
+ else:
+ base += urlutils.escape(relpath)
return base
def get_transport(self):
@@ -1109,20 +1116,18 @@
def make_bzrdir(self, relpath, format=None):
try:
- url = self.get_url(relpath)
- mutter('relpath %r => url %r', relpath, url)
- segments = url.split('/')
+ # might be a relative or absolute path
+ maybe_a_url = self.get_url(relpath)
+ segments = maybe_a_url.split('/')
+ t = get_transport(maybe_a_url)
if segments and segments[-1] not in ('', '.'):
- parent = '/'.join(segments[:-1])
- t = get_transport(parent)
try:
- t.mkdir(segments[-1])
+ t.mkdir('.')
except errors.FileExists:
pass
if format is None:
- format=bzrlib.bzrdir.BzrDirFormat.get_default_format()
- # FIXME: make this use a single transport someday. RBC 20060418
- return format.initialize_on_transport(get_transport(relpath))
+ format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
+ return format.initialize_on_transport(t)
except errors.UninitializableFormat:
raise TestSkipped("Format %s is not initializable." % format)
@@ -1134,7 +1139,17 @@
def make_branch_and_tree(self, relpath, format=None):
"""Create a branch on the transport and a tree locally.
- Returns the tree.
+ If the transport is not a LocalTransport, the Tree can't be created on
+ the transport. In that case the working tree is created in the local
+ directory, and the returned tree's branch and repository will also be
+ accessed locally.
+
+ This will fail if the original default transport for this test
+ case wasn't backed by the working directory, as the branch won't
+ be on disk for us to open it.
+
+ :param format: The BzrDirFormat.
+ :returns: the WorkingTree.
"""
# TODO: always use the local disk path for the working tree,
# this obviously requires a format that supports branch references
@@ -1144,11 +1159,14 @@
try:
return b.bzrdir.create_workingtree()
except errors.NotLocalUrl:
- # new formats - catch No tree error and create
- # a branch reference and a checkout.
- # old formats at that point - raise TestSkipped.
- # TODO: rbc 20060208
- return WorkingTreeFormat2().initialize(bzrdir.BzrDir.open(relpath))
+ # We can only make working trees locally at the moment. If the
+ # transport can't support them, then reopen the branch on a local
+ # transport, and create the working tree there.
+ #
+ # Possibly we should instead keep
+ # the non-disk-backed branch and create a local checkout?
+ bd = bzrdir.BzrDir.open(relpath)
+ return bd.create_workingtree()
def assertIsDirectory(self, relpath, transport):
"""Assert that relpath within transport is a directory.
=== modified file 'bzrlib/tests/test_selftest.py'
--- bzrlib/tests/test_selftest.py 2006-07-20 04:04:58 +0000
+++ bzrlib/tests/test_selftest.py 2006-07-27 07:16:35 +0000
@@ -34,9 +34,11 @@
TestSuite,
TextTestRunner,
)
+from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
from bzrlib.tests.TestUtil import _load_module_by_name
import bzrlib.errors as errors
from bzrlib.trace import note
+from bzrlib.transport.memory import MemoryServer, MemoryTransport
class SelftestTests(TestCase):
@@ -368,6 +370,21 @@
self.assertRaises(AssertionError, self.assertIsDirectory, 'not_here', t)
+class TestTestCaseTransports(TestCaseWithTransport):
+
+ def setUp(self):
+ super(TestTestCaseTransports, self).setUp()
+ self.transport_server = MemoryServer
+
+ def test_make_bzrdir_preserves_transport(self):
+ t = self.get_transport()
+ result_bzrdir = self.make_bzrdir('subdir')
+ self.assertIsInstance(result_bzrdir.transport,
+ MemoryTransport)
+ # should not be on disk, should only be in memory
+ self.failIfExists('subdir')
+
+
class TestChrootedTest(ChrootedTestCase):
def test_root_is_root(self):
@@ -682,6 +699,21 @@
bzrlib.bzrdir.BzrDirFormat6)
+class TestSFTPMakeBranchAndTree(TestCaseWithSFTPServer):
+
+ def test_make_tree_for_sftp_branch(self):
+ """Transports backed by local directories create local trees."""
+
+ tree = self.make_branch_and_tree('t1')
+ base = tree.bzrdir.root_transport.base
+ self.failIf(base.startswith('sftp'),
+ 'base %r is on sftp but should be local' % base)
+ self.assertEquals(tree.bzrdir.root_transport,
+ tree.branch.bzrdir.root_transport)
+ self.assertEquals(tree.bzrdir.root_transport,
+ tree.branch.repository.bzrdir.root_transport)
+
+
class TestSelftest(TestCase):
"""Tests of bzrlib.tests.selftest."""
More information about the bazaar
mailing list