1
# Copyright (C) 2006-2010 Canonical Ltd
1
# Copyright (C) 2006-2011 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
255
255
# is the right format object found for a branch?
256
256
# create a branch with a few known format objects.
257
257
# this is not quite the same as
258
t = get_transport(self.get_url())
258
t = self.get_transport()
259
259
self.build_tree(["foo/", "bar/"], transport=t)
260
260
def check_format(format, url):
261
261
format.initialize(url)
262
t = get_transport(url)
262
t = _mod_transport.get_transport(url)
263
263
found_format = bzrdir.BzrDirFormat.find_format(t)
264
264
self.failUnless(isinstance(found_format, format.__class__))
265
265
check_format(bzrdir.BzrDirFormat5(), "foo")
268
268
def test_find_format_nothing_there(self):
269
269
self.assertRaises(NotBranchError,
270
270
bzrdir.BzrDirFormat.find_format,
271
_mod_transport.get_transport('.'))
273
273
def test_find_format_unknown_format(self):
274
t = get_transport(self.get_url())
274
t = self.get_transport()
276
276
t.put_bytes('.bzr/branch-format', '')
277
277
self.assertRaises(UnknownFormatError,
278
278
bzrdir.BzrDirFormat.find_format,
279
_mod_transport.get_transport('.'))
281
281
def test_register_unregister_format(self):
282
282
format = SampleBzrDirFormat()
290
290
# which bzrdir.open_containing will refuse (not supported)
291
291
self.assertRaises(UnsupportedFormatError, bzrdir.BzrDir.open_containing, url)
292
292
# but open_downlevel will work
293
t = get_transport(url)
293
t = _mod_transport.get_transport(url)
294
294
self.assertEqual(format.open(t), bzrdir.BzrDir.open_unsupported(url))
295
295
# unregister the format
296
296
bzrdir.BzrDirFormat.unregister_format(format)
682
682
self.assertEqual(relpath, 'baz')
684
684
def test_open_containing_from_transport(self):
685
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_containing_from_transport,
686
get_transport(self.get_readonly_url('')))
687
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_containing_from_transport,
688
get_transport(self.get_readonly_url('g/p/q')))
685
self.assertRaises(NotBranchError,
686
bzrdir.BzrDir.open_containing_from_transport,
687
_mod_transport.get_transport(self.get_readonly_url('')))
688
self.assertRaises(NotBranchError,
689
bzrdir.BzrDir.open_containing_from_transport,
690
_mod_transport.get_transport(self.get_readonly_url('g/p/q')))
689
691
control = bzrdir.BzrDir.create(self.get_url())
690
692
branch, relpath = bzrdir.BzrDir.open_containing_from_transport(
691
get_transport(self.get_readonly_url('')))
693
_mod_transport.get_transport(self.get_readonly_url('')))
692
694
self.assertEqual('', relpath)
693
695
branch, relpath = bzrdir.BzrDir.open_containing_from_transport(
694
get_transport(self.get_readonly_url('g/p/q')))
696
_mod_transport.get_transport(self.get_readonly_url('g/p/q')))
695
697
self.assertEqual('g/p/q', relpath)
697
699
def test_open_containing_tree_or_branch(self):
741
743
# transport pointing at bzrdir should give a bzrdir with root transport
742
744
# set to the given transport
743
745
control = bzrdir.BzrDir.create(self.get_url())
744
transport = get_transport(self.get_url())
745
opened_bzrdir = bzrdir.BzrDir.open_from_transport(transport)
746
self.assertEqual(transport.base, opened_bzrdir.root_transport.base)
746
t = self.get_transport()
747
opened_bzrdir = bzrdir.BzrDir.open_from_transport(t)
748
self.assertEqual(t.base, opened_bzrdir.root_transport.base)
747
749
self.assertIsInstance(opened_bzrdir, bzrdir.BzrDir)
749
751
def test_open_from_transport_no_bzrdir(self):
750
transport = get_transport(self.get_url())
751
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_from_transport,
752
t = self.get_transport()
753
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_from_transport, t)
754
755
def test_open_from_transport_bzrdir_in_parent(self):
755
756
control = bzrdir.BzrDir.create(self.get_url())
756
transport = get_transport(self.get_url())
757
transport.mkdir('subdir')
758
transport = transport.clone('subdir')
759
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_from_transport,
757
t = self.get_transport()
759
t = t.clone('subdir')
760
self.assertRaises(NotBranchError, bzrdir.BzrDir.open_from_transport, t)
762
762
def test_sprout_recursive(self):
763
763
tree = self.make_branch_and_tree('tree1',
824
824
def test_find_bzrdirs(self):
825
825
foo, bar, baz = self.make_foo_bar_baz()
826
transport = get_transport(self.get_url())
827
self.assertEqualBzrdirs([baz, foo, bar],
828
bzrdir.BzrDir.find_bzrdirs(transport))
826
t = self.get_transport()
827
self.assertEqualBzrdirs([baz, foo, bar], bzrdir.BzrDir.find_bzrdirs(t))
830
829
def make_fake_permission_denied_transport(self, transport, paths):
831
830
"""Create a transport that raises PermissionDenied for some paths."""
848
847
def test_find_bzrdirs_permission_denied(self):
849
848
foo, bar, baz = self.make_foo_bar_baz()
850
transport = get_transport(self.get_url())
849
t = self.get_transport()
851
850
path_filter_server, path_filter_transport = \
852
self.make_fake_permission_denied_transport(transport, ['foo'])
851
self.make_fake_permission_denied_transport(t, ['foo'])
853
852
# local transport
854
853
self.assertBranchUrlsEndWith('/baz/',
855
854
bzrdir.BzrDir.find_bzrdirs(path_filter_transport))
864
863
return [s for s in transport.list_dir('') if s != 'baz']
866
865
foo, bar, baz = self.make_foo_bar_baz()
867
transport = get_transport(self.get_url())
868
self.assertEqualBzrdirs([foo, bar],
869
bzrdir.BzrDir.find_bzrdirs(transport,
870
list_current=list_current))
866
t = self.get_transport()
867
self.assertEqualBzrdirs(
869
bzrdir.BzrDir.find_bzrdirs(t, list_current=list_current))
872
871
def test_find_bzrdirs_evaluate(self):
873
872
def evaluate(bzrdir):
879
878
return False, bzrdir.root_transport.base
881
880
foo, bar, baz = self.make_foo_bar_baz()
882
transport = get_transport(self.get_url())
881
t = self.get_transport()
883
882
self.assertEqual([baz.root_transport.base, foo.root_transport.base],
884
list(bzrdir.BzrDir.find_bzrdirs(transport,
883
list(bzrdir.BzrDir.find_bzrdirs(t, evaluate=evaluate)))
887
885
def assertEqualBzrdirs(self, first, second):
888
886
first = list(first)
895
893
root = self.make_repository('', shared=True)
896
894
foo, bar, baz = self.make_foo_bar_baz()
897
895
qux = self.make_bzrdir('foo/qux')
898
transport = get_transport(self.get_url())
899
branches = bzrdir.BzrDir.find_branches(transport)
896
t = self.get_transport()
897
branches = bzrdir.BzrDir.find_branches(t)
900
898
self.assertEqual(baz.root_transport.base, branches[0].base)
901
899
self.assertEqual(foo.root_transport.base, branches[1].base)
902
900
self.assertEqual(bar.root_transport.base, branches[2].base)
904
902
# ensure this works without a top-level repo
905
branches = bzrdir.BzrDir.find_branches(transport.clone('foo'))
903
branches = bzrdir.BzrDir.find_branches(t.clone('foo'))
906
904
self.assertEqual(foo.root_transport.base, branches[0].base)
907
905
self.assertEqual(bar.root_transport.base, branches[1].base)
910
908
class TestMissingRepoBranchesSkipped(TestCaseWithMemoryTransport):
912
910
def test_find_bzrdirs_missing_repo(self):
913
transport = get_transport(self.get_url())
911
t = self.get_transport()
914
912
arepo = self.make_repository('arepo', shared=True)
915
913
abranch_url = arepo.user_url + '/abranch'
916
914
abranch = bzrdir.BzrDir.create(abranch_url).create_branch()
917
transport.delete_tree('arepo/.bzr')
915
t.delete_tree('arepo/.bzr')
918
916
self.assertRaises(errors.NoRepositoryPresent,
919
917
branch.Branch.open, abranch_url)
920
918
self.make_branch('baz')
921
for actual_bzrdir in bzrdir.BzrDir.find_branches(transport):
919
for actual_bzrdir in bzrdir.BzrDir.find_branches(t):
922
920
self.assertEndsWith(actual_bzrdir.user_url, '/baz/')
1100
1098
# now probe for it.
1101
1099
controldir.ControlDirFormat.register_prober(NotBzrDirProber)
1103
found = bzrlib.bzrdir.BzrDirFormat.find_format(
1104
get_transport(self.get_url()))
1101
found = bzrlib.bzrdir.BzrDirFormat.find_format(self.get_transport())
1105
1102
self.assertIsInstance(found, NotBzrDirFormat)
1107
1104
controldir.ControlDirFormat.unregister_prober(NotBzrDirProber)
1450
1447
def setUp(self):
1451
1448
super(TestGenerateBackupName, self).setUp()
1452
self._transport = get_transport(self.get_url())
1449
self._transport = self.get_transport()
1453
1450
bzrdir.BzrDir.create(self.get_url(),
1454
1451
possible_transports=[self._transport])
1455
1452
self._bzrdir = bzrdir.BzrDir.open_from_transport(self._transport)