46
48
old_format = bzrdir.BzrDirFormat.get_default_format()
47
49
# default is BzrDirFormat6
48
50
self.failUnless(isinstance(old_format, bzrdir.BzrDirMetaFormat1))
49
bzrdir.BzrDirFormat.set_default_format(SampleBzrDirFormat())
51
self.applyDeprecated(symbol_versioning.zero_fourteen,
52
bzrdir.BzrDirFormat.set_default_format,
50
54
# creating a bzr dir should now create an instrumented dir.
52
56
result = bzrdir.BzrDir.create('memory:///')
53
57
self.failUnless(isinstance(result, SampleBzrDir))
55
bzrdir.BzrDirFormat.set_default_format(old_format)
59
self.applyDeprecated(symbol_versioning.zero_fourteen,
60
bzrdir.BzrDirFormat.set_default_format, old_format)
56
61
self.assertEqual(old_format, bzrdir.BzrDirFormat.get_default_format())
64
class TestFormatRegistry(TestCase):
66
def make_format_registry(self):
67
my_format_registry = bzrdir.BzrDirFormatRegistry()
68
my_format_registry.register('weave', bzrdir.BzrDirFormat6,
69
'Pre-0.8 format. Slower and does not support checkouts or shared'
70
' repositories', deprecated=True)
71
my_format_registry.register_lazy('lazy', 'bzrlib.bzrdir',
72
'BzrDirFormat6', 'Format registered lazily', deprecated=True)
73
my_format_registry.register_metadir('knit', 'RepositoryFormatKnit1',
75
my_format_registry.set_default('knit')
76
my_format_registry.register_metadir('metaweave', 'RepositoryFormat7',
77
'Transitional format in 0.8. Slower than knit.', deprecated=True)
78
my_format_registry.register_metadir('experimental-knit2',
79
'RepositoryFormatKnit2',
80
'Experimental successor to knit. Use at your own risk.')
81
return my_format_registry
83
def test_format_registry(self):
84
my_format_registry = self.make_format_registry()
85
my_bzrdir = my_format_registry.make_bzrdir('lazy')
86
self.assertIsInstance(my_bzrdir, bzrdir.BzrDirFormat6)
87
my_bzrdir = my_format_registry.make_bzrdir('weave')
88
self.assertIsInstance(my_bzrdir, bzrdir.BzrDirFormat6)
89
my_bzrdir = my_format_registry.make_bzrdir('default')
90
self.assertIsInstance(my_bzrdir.repository_format,
91
repository.RepositoryFormatKnit1)
92
my_bzrdir = my_format_registry.make_bzrdir('knit')
93
self.assertIsInstance(my_bzrdir.repository_format,
94
repository.RepositoryFormatKnit1)
95
my_bzrdir = my_format_registry.make_bzrdir('metaweave')
96
self.assertIsInstance(my_bzrdir.repository_format,
97
repository.RepositoryFormat7)
99
def test_get_help(self):
100
my_format_registry = self.make_format_registry()
101
self.assertEqual('Format registered lazily',
102
my_format_registry.get_help('lazy'))
103
self.assertEqual('Format using knits',
104
my_format_registry.get_help('knit'))
105
self.assertEqual('Format using knits',
106
my_format_registry.get_help('default'))
107
self.assertEqual('Pre-0.8 format. Slower and does not support'
108
' checkouts or shared repositories',
109
my_format_registry.get_help('weave'))
111
def test_help_topic(self):
112
topics = help_topics.HelpTopicRegistry()
113
topics.register('formats', self.make_format_registry().help_topic,
115
topic = topics.get_detail('formats')
116
new, deprecated = topic.split('Deprecated formats')
117
self.assertContainsRe(new, 'Bazaar directory formats')
118
self.assertContainsRe(new,
119
' knit/default:\n \(native\) Format using knits\n')
120
self.assertContainsRe(deprecated,
121
' lazy:\n \(native\) Format registered lazily\n')
123
def test_set_default_repository(self):
124
default_factory = bzrdir.format_registry.get('default')
125
old_default = [k for k, v in bzrdir.format_registry.iteritems()
126
if v == default_factory and k != 'default'][0]
127
bzrdir.format_registry.set_default_repository('metaweave')
129
self.assertIs(bzrdir.format_registry.get('metaweave'),
130
bzrdir.format_registry.get('default'))
132
repository.RepositoryFormat.get_default_format().__class__,
133
repository.RepositoryFormat7)
135
bzrdir.format_registry.set_default_repository(old_default)
59
137
class SampleBranch(bzrlib.branch.Branch):
60
138
"""A dummy branch for guess what, dummy use."""
180
253
def test_create_repository_under_shared(self):
181
254
# an explicit create_repository always does so.
182
255
# we trust the format is right from the 'create_repository test'
183
old_format = bzrdir.BzrDirFormat.get_default_format()
184
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
186
self.make_repository('.', shared=True)
187
repo = bzrdir.BzrDir.create_repository(self.get_url('child'))
188
self.assertTrue(isinstance(repo, repository.Repository))
189
self.assertTrue(repo.bzrdir.root_transport.base.endswith('child/'))
191
bzrdir.BzrDirFormat.set_default_format(old_format)
256
format = bzrdir.format_registry.make_bzrdir('knit')
257
self.make_repository('.', shared=True, format=format)
258
repo = bzrdir.BzrDir.create_repository(self.get_url('child'),
260
self.assertTrue(isinstance(repo, repository.Repository))
261
self.assertTrue(repo.bzrdir.root_transport.base.endswith('child/'))
193
263
def test_create_branch_and_repo_uses_default(self):
194
264
format = SampleBzrDirFormat()
195
old_format = bzrdir.BzrDirFormat.get_default_format()
196
bzrdir.BzrDirFormat.set_default_format(format)
198
branch = bzrdir.BzrDir.create_branch_and_repo(self.get_url())
199
self.assertTrue(isinstance(branch, SampleBranch))
201
bzrdir.BzrDirFormat.set_default_format(old_format)
265
branch = bzrdir.BzrDir.create_branch_and_repo(self.get_url(),
267
self.assertTrue(isinstance(branch, SampleBranch))
203
269
def test_create_branch_and_repo_under_shared(self):
204
270
# creating a branch and repo in a shared repo uses the
205
271
# shared repository
206
old_format = bzrdir.BzrDirFormat.get_default_format()
207
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
209
self.make_repository('.', shared=True)
210
branch = bzrdir.BzrDir.create_branch_and_repo(self.get_url('child'))
211
self.assertRaises(errors.NoRepositoryPresent,
212
branch.bzrdir.open_repository)
214
bzrdir.BzrDirFormat.set_default_format(old_format)
272
format = bzrdir.format_registry.make_bzrdir('knit')
273
self.make_repository('.', shared=True, format=format)
274
branch = bzrdir.BzrDir.create_branch_and_repo(
275
self.get_url('child'), format=format)
276
self.assertRaises(errors.NoRepositoryPresent,
277
branch.bzrdir.open_repository)
216
279
def test_create_branch_and_repo_under_shared_force_new(self):
217
280
# creating a branch and repo in a shared repo can be forced to
218
281
# make a new repo
219
old_format = bzrdir.BzrDirFormat.get_default_format()
220
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
222
self.make_repository('.', shared=True)
223
branch = bzrdir.BzrDir.create_branch_and_repo(self.get_url('child'),
225
branch.bzrdir.open_repository()
227
bzrdir.BzrDirFormat.set_default_format(old_format)
282
format = bzrdir.format_registry.make_bzrdir('knit')
283
self.make_repository('.', shared=True, format=format)
284
branch = bzrdir.BzrDir.create_branch_and_repo(self.get_url('child'),
287
branch.bzrdir.open_repository()
229
289
def test_create_standalone_working_tree(self):
230
290
format = SampleBzrDirFormat()
231
old_format = bzrdir.BzrDirFormat.get_default_format()
232
bzrdir.BzrDirFormat.set_default_format(format)
234
# note this is deliberately readonly, as this failure should
235
# occur before any writes.
236
self.assertRaises(errors.NotLocalUrl,
237
bzrdir.BzrDir.create_standalone_workingtree,
238
self.get_readonly_url())
239
tree = bzrdir.BzrDir.create_standalone_workingtree('.')
240
self.assertEqual('A tree', tree)
242
bzrdir.BzrDirFormat.set_default_format(old_format)
291
# note this is deliberately readonly, as this failure should
292
# occur before any writes.
293
self.assertRaises(errors.NotLocalUrl,
294
bzrdir.BzrDir.create_standalone_workingtree,
295
self.get_readonly_url(), format=format)
296
tree = bzrdir.BzrDir.create_standalone_workingtree('.',
298
self.assertEqual('A tree', tree)
244
300
def test_create_standalone_working_tree_under_shared_repo(self):
245
301
# create standalone working tree always makes a repo.
246
old_format = bzrdir.BzrDirFormat.get_default_format()
247
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
249
self.make_repository('.', shared=True)
250
# note this is deliberately readonly, as this failure should
251
# occur before any writes.
252
self.assertRaises(errors.NotLocalUrl,
253
bzrdir.BzrDir.create_standalone_workingtree,
254
self.get_readonly_url('child'))
255
tree = bzrdir.BzrDir.create_standalone_workingtree('child')
256
tree.bzrdir.open_repository()
258
bzrdir.BzrDirFormat.set_default_format(old_format)
302
format = bzrdir.format_registry.make_bzrdir('knit')
303
self.make_repository('.', shared=True, format=format)
304
# note this is deliberately readonly, as this failure should
305
# occur before any writes.
306
self.assertRaises(errors.NotLocalUrl,
307
bzrdir.BzrDir.create_standalone_workingtree,
308
self.get_readonly_url('child'), format=format)
309
tree = bzrdir.BzrDir.create_standalone_workingtree('child',
311
tree.bzrdir.open_repository()
260
313
def test_create_branch_convenience(self):
261
314
# outside a repo the default convenience output is a repo+branch_tree
262
old_format = bzrdir.BzrDirFormat.get_default_format()
263
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
265
branch = bzrdir.BzrDir.create_branch_convenience('.')
266
branch.bzrdir.open_workingtree()
267
branch.bzrdir.open_repository()
269
bzrdir.BzrDirFormat.set_default_format(old_format)
315
format = bzrdir.format_registry.make_bzrdir('knit')
316
branch = bzrdir.BzrDir.create_branch_convenience('.', format=format)
317
branch.bzrdir.open_workingtree()
318
branch.bzrdir.open_repository()
271
320
def test_create_branch_convenience_root(self):
272
321
"""Creating a branch at the root of a fs should work."""
273
322
self.transport_server = MemoryServer
274
323
# outside a repo the default convenience output is a repo+branch_tree
275
old_format = bzrdir.BzrDirFormat.get_default_format()
276
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
278
branch = bzrdir.BzrDir.create_branch_convenience(self.get_url())
279
self.assertRaises(errors.NoWorkingTree,
280
branch.bzrdir.open_workingtree)
281
branch.bzrdir.open_repository()
283
bzrdir.BzrDirFormat.set_default_format(old_format)
324
format = bzrdir.format_registry.make_bzrdir('knit')
325
branch = bzrdir.BzrDir.create_branch_convenience(self.get_url(),
327
self.assertRaises(errors.NoWorkingTree,
328
branch.bzrdir.open_workingtree)
329
branch.bzrdir.open_repository()
285
331
def test_create_branch_convenience_under_shared_repo(self):
286
332
# inside a repo the default convenience output is a branch+ follow the
287
333
# repo tree policy
288
old_format = bzrdir.BzrDirFormat.get_default_format()
289
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
291
self.make_repository('.', shared=True)
292
branch = bzrdir.BzrDir.create_branch_convenience('child')
293
branch.bzrdir.open_workingtree()
294
self.assertRaises(errors.NoRepositoryPresent,
295
branch.bzrdir.open_repository)
297
bzrdir.BzrDirFormat.set_default_format(old_format)
334
format = bzrdir.format_registry.make_bzrdir('knit')
335
self.make_repository('.', shared=True, format=format)
336
branch = bzrdir.BzrDir.create_branch_convenience('child',
338
branch.bzrdir.open_workingtree()
339
self.assertRaises(errors.NoRepositoryPresent,
340
branch.bzrdir.open_repository)
299
342
def test_create_branch_convenience_under_shared_repo_force_no_tree(self):
300
343
# inside a repo the default convenience output is a branch+ follow the
301
344
# repo tree policy but we can override that
302
old_format = bzrdir.BzrDirFormat.get_default_format()
303
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
305
self.make_repository('.', shared=True)
306
branch = bzrdir.BzrDir.create_branch_convenience('child',
307
force_new_tree=False)
308
self.assertRaises(errors.NoWorkingTree,
309
branch.bzrdir.open_workingtree)
310
self.assertRaises(errors.NoRepositoryPresent,
311
branch.bzrdir.open_repository)
313
bzrdir.BzrDirFormat.set_default_format(old_format)
345
format = bzrdir.format_registry.make_bzrdir('knit')
346
self.make_repository('.', shared=True, format=format)
347
branch = bzrdir.BzrDir.create_branch_convenience('child',
348
force_new_tree=False, format=format)
349
self.assertRaises(errors.NoWorkingTree,
350
branch.bzrdir.open_workingtree)
351
self.assertRaises(errors.NoRepositoryPresent,
352
branch.bzrdir.open_repository)
315
354
def test_create_branch_convenience_under_shared_repo_no_tree_policy(self):
316
355
# inside a repo the default convenience output is a branch+ follow the
317
356
# repo tree policy
318
old_format = bzrdir.BzrDirFormat.get_default_format()
319
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
321
repo = self.make_repository('.', shared=True)
322
repo.set_make_working_trees(False)
323
branch = bzrdir.BzrDir.create_branch_convenience('child')
324
self.assertRaises(errors.NoWorkingTree,
325
branch.bzrdir.open_workingtree)
326
self.assertRaises(errors.NoRepositoryPresent,
327
branch.bzrdir.open_repository)
329
bzrdir.BzrDirFormat.set_default_format(old_format)
357
format = bzrdir.format_registry.make_bzrdir('knit')
358
repo = self.make_repository('.', shared=True, format=format)
359
repo.set_make_working_trees(False)
360
branch = bzrdir.BzrDir.create_branch_convenience('child',
362
self.assertRaises(errors.NoWorkingTree,
363
branch.bzrdir.open_workingtree)
364
self.assertRaises(errors.NoRepositoryPresent,
365
branch.bzrdir.open_repository)
331
367
def test_create_branch_convenience_under_shared_repo_no_tree_policy_force_tree(self):
332
368
# inside a repo the default convenience output is a branch+ follow the
333
369
# repo tree policy but we can override that
334
old_format = bzrdir.BzrDirFormat.get_default_format()
335
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
337
repo = self.make_repository('.', shared=True)
338
repo.set_make_working_trees(False)
339
branch = bzrdir.BzrDir.create_branch_convenience('child',
341
branch.bzrdir.open_workingtree()
342
self.assertRaises(errors.NoRepositoryPresent,
343
branch.bzrdir.open_repository)
345
bzrdir.BzrDirFormat.set_default_format(old_format)
370
format = bzrdir.format_registry.make_bzrdir('knit')
371
repo = self.make_repository('.', shared=True, format=format)
372
repo.set_make_working_trees(False)
373
branch = bzrdir.BzrDir.create_branch_convenience('child',
374
force_new_tree=True, format=format)
375
branch.bzrdir.open_workingtree()
376
self.assertRaises(errors.NoRepositoryPresent,
377
branch.bzrdir.open_repository)
347
379
def test_create_branch_convenience_under_shared_repo_force_new_repo(self):
348
380
# inside a repo the default convenience output is overridable to give
349
381
# repo+branch+tree
350
old_format = bzrdir.BzrDirFormat.get_default_format()
351
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
353
self.make_repository('.', shared=True)
354
branch = bzrdir.BzrDir.create_branch_convenience('child',
356
branch.bzrdir.open_repository()
357
branch.bzrdir.open_workingtree()
359
bzrdir.BzrDirFormat.set_default_format(old_format)
382
format = bzrdir.format_registry.make_bzrdir('knit')
383
self.make_repository('.', shared=True, format=format)
384
branch = bzrdir.BzrDir.create_branch_convenience('child',
385
force_new_repo=True, format=format)
386
branch.bzrdir.open_repository()
387
branch.bzrdir.open_workingtree()
362
390
class ChrootedTests(TestCaseWithTransport):