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