81
85
self.assertEqual(old_format, bzrdir.BzrDirFormat.get_default_format())
88
class DeprecatedBzrDirFormat(bzrdir.BzrDirFormat):
89
"""A deprecated bzr dir format."""
84
92
class TestFormatRegistry(TestCase):
86
94
def make_format_registry(self):
87
95
my_format_registry = controldir.ControlDirFormatRegistry()
88
my_format_registry.register('weave', bzrdir.BzrDirFormat6,
89
'Pre-0.8 format. Slower and does not support checkouts or shared'
90
' repositories', deprecated=True)
91
my_format_registry.register_lazy('lazy', 'bzrlib.bzrdir',
92
'BzrDirFormat6', 'Format registered lazily', deprecated=True)
96
my_format_registry.register('deprecated', DeprecatedBzrDirFormat,
97
'Some format. Slower and unawesome and deprecated.',
99
my_format_registry.register_lazy('lazy', 'bzrlib.tests.test_bzrdir',
100
'DeprecatedBzrDirFormat', 'Format registered lazily',
93
102
bzrdir.register_metadir(my_format_registry, 'knit',
94
103
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit1',
95
104
'Format using knits',
106
115
'bzrlib.repofmt.knitrepo.RepositoryFormatKnit3',
107
116
'Experimental successor to knit. Use at your own risk.',
108
117
branch_format='bzrlib.branch.BzrBranchFormat6', hidden=True)
109
my_format_registry.register('hiddenweave', bzrdir.BzrDirFormat6,
110
'Pre-0.8 format. Slower and does not support checkouts or shared'
111
' repositories', hidden=True)
112
my_format_registry.register_lazy('hiddenlazy', 'bzrlib.bzrdir',
113
'BzrDirFormat6', 'Format registered lazily', deprecated=True,
118
my_format_registry.register('hiddendeprecated', DeprecatedBzrDirFormat,
119
'Old format. Slower and does not support things. ', hidden=True)
120
my_format_registry.register_lazy('hiddenlazy', 'bzrlib.tests.test_bzrdir',
121
'DeprecatedBzrDirFormat', 'Format registered lazily',
122
deprecated=True, hidden=True)
115
123
return my_format_registry
117
125
def test_format_registry(self):
118
126
my_format_registry = self.make_format_registry()
119
127
my_bzrdir = my_format_registry.make_bzrdir('lazy')
120
self.assertIsInstance(my_bzrdir, bzrdir.BzrDirFormat6)
121
my_bzrdir = my_format_registry.make_bzrdir('weave')
122
self.assertIsInstance(my_bzrdir, bzrdir.BzrDirFormat6)
128
self.assertIsInstance(my_bzrdir, DeprecatedBzrDirFormat)
129
my_bzrdir = my_format_registry.make_bzrdir('deprecated')
130
self.assertIsInstance(my_bzrdir, DeprecatedBzrDirFormat)
123
131
my_bzrdir = my_format_registry.make_bzrdir('default')
124
132
self.assertIsInstance(my_bzrdir.repository_format,
125
133
knitrepo.RepositoryFormatKnit1)
170
177
self.assertIs(bzrdir.format_registry.get('dirstate-with-subtree'),
171
178
bzrdir.format_registry.get('default'))
173
repository.RepositoryFormat.get_default_format().__class__,
180
repository.format_registry.get_default().__class__,
174
181
knitrepo.RepositoryFormatKnit3)
176
183
bzrdir.format_registry.set_default_repository(old_default)
178
185
def test_aliases(self):
179
186
a_registry = controldir.ControlDirFormatRegistry()
180
a_registry.register('weave', bzrdir.BzrDirFormat6,
181
'Pre-0.8 format. Slower and does not support checkouts or shared'
182
' repositories', deprecated=True)
183
a_registry.register('weavealias', bzrdir.BzrDirFormat6,
184
'Pre-0.8 format. Slower and does not support checkouts or shared'
185
' repositories', deprecated=True, alias=True)
186
self.assertEqual(frozenset(['weavealias']), a_registry.aliases())
187
a_registry.register('deprecated', DeprecatedBzrDirFormat,
188
'Old format. Slower and does not support stuff',
190
a_registry.register('deprecatedalias', DeprecatedBzrDirFormat,
191
'Old format. Slower and does not support stuff',
192
deprecated=True, alias=True)
193
self.assertEqual(frozenset(['deprecatedalias']), a_registry.aliases())
189
196
class SampleBranch(bzrlib.branch.Branch):
246
253
return "opened branch."
256
class BzrDirFormatTest1(bzrdir.BzrDirMetaFormat1):
259
def get_format_string():
260
return "Test format 1"
263
class BzrDirFormatTest2(bzrdir.BzrDirMetaFormat1):
266
def get_format_string():
267
return "Test format 2"
249
270
class TestBzrDirFormat(TestCaseWithTransport):
250
271
"""Tests for the BzrDirFormat facility."""
252
273
def test_find_format(self):
253
274
# is the right format object found for a branch?
254
275
# create a branch with a few known format objects.
255
# this is not quite the same as
276
bzrdir.BzrProber.formats.register(BzrDirFormatTest1.get_format_string(),
278
self.addCleanup(bzrdir.BzrProber.formats.remove,
279
BzrDirFormatTest1.get_format_string())
280
bzrdir.BzrProber.formats.register(BzrDirFormatTest2.get_format_string(),
282
self.addCleanup(bzrdir.BzrProber.formats.remove,
283
BzrDirFormatTest2.get_format_string())
256
284
t = self.get_transport()
257
285
self.build_tree(["foo/", "bar/"], transport=t)
258
286
def check_format(format, url):
930
958
dir.get_branch_transport(bzrlib.branch.BzrBranchFormat5()).base)
931
959
repository_base = t.clone('repository').base
932
960
self.assertEqual(repository_base, dir.get_repository_transport(None).base)
961
repository_format = repository.format_registry.get_default()
933
962
self.assertEqual(repository_base,
934
dir.get_repository_transport(weaverepo.RepositoryFormat7()).base)
963
dir.get_repository_transport(repository_format).base)
935
964
checkout_base = t.clone('checkout').base
936
965
self.assertEqual(checkout_base, dir.get_workingtree_transport(None).base)
937
966
self.assertEqual(checkout_base,
938
dir.get_workingtree_transport(workingtree.WorkingTreeFormat3()).base)
967
dir.get_workingtree_transport(workingtree_3.WorkingTreeFormat3()).base)
940
969
def test_meta1dir_uses_lockdir(self):
941
970
"""Meta1 format uses a LockDir to guard the whole directory, not a file."""
983
1012
self.assertEqual(2, rpc_count)
986
class TestFormat5(TestCaseWithTransport):
987
"""Tests specific to the version 5 bzrdir format."""
989
def test_same_lockfiles_between_tree_repo_branch(self):
990
# this checks that only a single lockfiles instance is created
991
# for format 5 objects
992
dir = bzrdir.BzrDirFormat5().initialize(self.get_url())
993
def check_dir_components_use_same_lock(dir):
994
ctrl_1 = dir.open_repository().control_files
995
ctrl_2 = dir.open_branch().control_files
996
ctrl_3 = dir.open_workingtree()._control_files
997
self.assertTrue(ctrl_1 is ctrl_2)
998
self.assertTrue(ctrl_2 is ctrl_3)
999
check_dir_components_use_same_lock(dir)
1000
# and if we open it normally.
1001
dir = bzrdir.BzrDir.open(self.get_url())
1002
check_dir_components_use_same_lock(dir)
1004
def test_can_convert(self):
1005
# format 5 dirs are convertable
1006
dir = bzrdir.BzrDirFormat5().initialize(self.get_url())
1007
self.assertTrue(dir.can_convert_format())
1009
def test_needs_conversion(self):
1010
# format 5 dirs need a conversion if they are not the default,
1012
dir = bzrdir.BzrDirFormat5().initialize(self.get_url())
1013
# don't need to convert it to itself
1014
self.assertFalse(dir.needs_format_conversion(bzrdir.BzrDirFormat5()))
1015
# do need to convert it to the current default
1016
self.assertTrue(dir.needs_format_conversion(
1017
bzrdir.BzrDirFormat.get_default_format()))
1020
class TestFormat6(TestCaseWithTransport):
1021
"""Tests specific to the version 6 bzrdir format."""
1023
def test_same_lockfiles_between_tree_repo_branch(self):
1024
# this checks that only a single lockfiles instance is created
1025
# for format 6 objects
1026
dir = bzrdir.BzrDirFormat6().initialize(self.get_url())
1027
def check_dir_components_use_same_lock(dir):
1028
ctrl_1 = dir.open_repository().control_files
1029
ctrl_2 = dir.open_branch().control_files
1030
ctrl_3 = dir.open_workingtree()._control_files
1031
self.assertTrue(ctrl_1 is ctrl_2)
1032
self.assertTrue(ctrl_2 is ctrl_3)
1033
check_dir_components_use_same_lock(dir)
1034
# and if we open it normally.
1035
dir = bzrdir.BzrDir.open(self.get_url())
1036
check_dir_components_use_same_lock(dir)
1038
def test_can_convert(self):
1039
# format 6 dirs are convertable
1040
dir = bzrdir.BzrDirFormat6().initialize(self.get_url())
1041
self.assertTrue(dir.can_convert_format())
1043
def test_needs_conversion(self):
1044
# format 6 dirs need an conversion if they are not the default.
1045
dir = bzrdir.BzrDirFormat6().initialize(self.get_url())
1046
self.assertTrue(dir.needs_format_conversion(
1047
bzrdir.BzrDirFormat.get_default_format()))
1050
class NotBzrDir(bzrlib.bzrdir.BzrDir):
1051
"""A non .bzr based control directory."""
1053
def __init__(self, transport, format):
1054
self._format = format
1055
self.root_transport = transport
1056
self.transport = transport.clone('.not')
1059
class NotBzrDirFormat(bzrlib.bzrdir.BzrDirFormat):
1060
"""A test class representing any non-.bzr based disk format."""
1062
def initialize_on_transport(self, transport):
1063
"""Initialize a new .not dir in the base directory of a Transport."""
1064
transport.mkdir('.not')
1065
return self.open(transport)
1067
def open(self, transport):
1068
"""Open this directory."""
1069
return NotBzrDir(transport, self)
1072
def _known_formats(self):
1073
return set([NotBzrDirFormat()])
1076
class NotBzrDirProber(controldir.Prober):
1078
def probe_transport(self, transport):
1079
"""Our format is present if the transport ends in '.not/'."""
1080
if transport.has('.not'):
1081
return NotBzrDirFormat()
1084
class TestNotBzrDir(TestCaseWithTransport):
1085
"""Tests for using the bzrdir api with a non .bzr based disk format.
1087
If/when one of these is in the core, we can let the implementation tests
1091
def test_create_and_find_format(self):
1092
# create a .notbzr dir
1093
format = NotBzrDirFormat()
1094
dir = format.initialize(self.get_url())
1095
self.assertIsInstance(dir, NotBzrDir)
1097
controldir.ControlDirFormat.register_prober(NotBzrDirProber)
1099
found = bzrlib.bzrdir.BzrDirFormat.find_format(self.get_transport())
1100
self.assertIsInstance(found, NotBzrDirFormat)
1102
controldir.ControlDirFormat.unregister_prober(NotBzrDirProber)
1104
def test_included_in_known_formats(self):
1105
not_format = NotBzrDirFormat()
1106
bzrlib.controldir.ControlDirFormat.register_format(not_format)
1108
formats = bzrlib.bzrdir.BzrDirFormat.known_formats()
1109
for format in formats:
1110
if isinstance(format, NotBzrDirFormat):
1112
self.fail("No NotBzrDirFormat in %s" % formats)
1114
bzrlib.controldir.ControlDirFormat.unregister_format(not_format)
1117
1015
class NonLocalTests(TestCaseWithTransport):
1118
1016
"""Tests for bzrdir static behaviour on non local paths."""