1
# Copyright (C) 2006, 2007 Canonical Ltd
1
# Copyright (C) 2006 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
34
33
UnknownFormatError,
35
34
UnsupportedFormatError,
37
from bzrlib.repository import RepositoryFormat
36
import bzrlib.repository as repository
38
37
from bzrlib.tests import TestCase, TestCaseWithTransport
39
38
from bzrlib.transport import get_transport
39
from bzrlib.transport.http import HttpServer
40
40
from bzrlib.transport.memory import MemoryServer
46
from bzrlib.repofmt import knitrepo, weaverepo
41
from bzrlib import upgrade, workingtree
49
44
class TestDefaultFormat(TestCase):
51
46
def test_get_set_default_format(self):
52
old_default = bzrdir.format_registry.get('default')
53
private_default = old_default().repository_format.__class__
47
private_default = repository._default_format.__class__
54
48
old_format = repository.RepositoryFormat.get_default_format()
55
49
self.assertTrue(isinstance(old_format, private_default))
56
def make_sample_bzrdir():
57
my_bzrdir = bzrdir.BzrDirMetaFormat1()
58
my_bzrdir.repository_format = SampleRepositoryFormat()
60
bzrdir.format_registry.remove('default')
61
bzrdir.format_registry.register('sample', make_sample_bzrdir, '')
62
bzrdir.format_registry.set_default('sample')
50
repository.RepositoryFormat.set_default_format(SampleRepositoryFormat())
63
51
# creating a repository should now create an instrumented dir.
65
53
# the default branch format is used by the meta dir format
68
56
result = dir.create_repository()
69
57
self.assertEqual(result, 'A bzr repository dir')
71
bzrdir.format_registry.remove('default')
72
bzrdir.format_registry.register('default', old_default, '')
73
self.assertIsInstance(repository.RepositoryFormat.get_default_format(),
59
repository.RepositoryFormat.set_default_format(old_format)
60
self.assertEqual(old_format, repository.RepositoryFormat.get_default_format())
77
63
class SampleRepositoryFormat(repository.RepositoryFormat):
112
98
t = get_transport(url)
113
99
found_format = repository.RepositoryFormat.find_format(dir)
114
100
self.failUnless(isinstance(found_format, format.__class__))
115
check_format(weaverepo.RepositoryFormat7(), "bar")
101
check_format(repository.RepositoryFormat7(), "bar")
117
103
def test_find_format_no_repository(self):
118
104
dir = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
148
134
def test_no_ancestry_weave(self):
149
135
control = bzrdir.BzrDirFormat6().initialize(self.get_url())
150
repo = weaverepo.RepositoryFormat6().initialize(control)
136
repo = repository.RepositoryFormat6().initialize(control)
151
137
# We no longer need to create the ancestry.weave file
152
138
# since it is *never* used.
153
139
self.assertRaises(NoSuchFile,
160
146
def test_disk_layout(self):
161
147
control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
162
repo = weaverepo.RepositoryFormat7().initialize(control)
148
repo = repository.RepositoryFormat7().initialize(control)
163
149
# in case of side effects of locking.
164
150
repo.lock_write()
182
168
def test_shared_disk_layout(self):
183
169
control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
184
repo = weaverepo.RepositoryFormat7().initialize(control, shared=True)
170
repo = repository.RepositoryFormat7().initialize(control, shared=True)
186
172
# format 'Bazaar-NG Repository format 7'
187
173
# inventory.weave == empty_weave
204
190
def test_creates_lockdir(self):
205
191
"""Make sure it appears to be controlled by a LockDir existence"""
206
192
control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
207
repo = weaverepo.RepositoryFormat7().initialize(control, shared=True)
193
repo = repository.RepositoryFormat7().initialize(control, shared=True)
208
194
t = control.get_repository_transport(None)
209
195
# TODO: Should check there is a 'lock' toplevel directory,
210
196
# regardless of contents
220
206
"""repo format 7 actually locks on lockdir"""
221
207
base_url = self.get_url()
222
208
control = bzrdir.BzrDirMetaFormat1().initialize(base_url)
223
repo = weaverepo.RepositoryFormat7().initialize(control, shared=True)
209
repo = repository.RepositoryFormat7().initialize(control, shared=True)
224
210
t = control.get_repository_transport(None)
225
211
repo.lock_write()
235
221
def test_shared_no_tree_disk_layout(self):
236
222
control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
237
repo = weaverepo.RepositoryFormat7().initialize(control, shared=True)
223
repo = repository.RepositoryFormat7().initialize(control, shared=True)
238
224
repo.set_make_working_trees(False)
240
226
# format 'Bazaar-NG Repository format 7'
264
250
def test_disk_layout(self):
265
251
control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
266
repo = knitrepo.RepositoryFormatKnit1().initialize(control)
252
repo = repository.RepositoryFormatKnit1().initialize(control)
267
253
# in case of side effects of locking.
268
254
repo.lock_write()
297
283
def test_shared_disk_layout(self):
298
284
control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
299
repo = knitrepo.RepositoryFormatKnit1().initialize(control, shared=True)
285
repo = repository.RepositoryFormatKnit1().initialize(control, shared=True)
301
287
# format 'Bazaar-NG Knit Repository Format 1'
302
288
# lock: is a directory
316
302
def test_shared_no_tree_disk_layout(self):
317
303
control = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
318
repo = knitrepo.RepositoryFormatKnit1().initialize(control, shared=True)
304
repo = repository.RepositoryFormatKnit1().initialize(control, shared=True)
319
305
repo.set_make_working_trees(False)
321
307
# format 'Bazaar-NG Knit Repository Format 1'
403
389
def test_is_compatible_and_registered(self):
404
390
# InterWeaveRepo is compatible when either side
405
391
# is a format 5/6/7 branch
406
from bzrlib.repofmt import knitrepo, weaverepo
407
formats = [weaverepo.RepositoryFormat5(),
408
weaverepo.RepositoryFormat6(),
409
weaverepo.RepositoryFormat7()]
410
incompatible_formats = [weaverepo.RepositoryFormat4(),
411
knitrepo.RepositoryFormatKnit1(),
392
formats = [repository.RepositoryFormat5(),
393
repository.RepositoryFormat6(),
394
repository.RepositoryFormat7()]
395
incompatible_formats = [repository.RepositoryFormat4(),
396
repository.RepositoryFormatKnit1(),
413
398
repo_a = self.make_repository('a')
414
399
repo_b = self.make_repository('b')
435
420
t = get_transport(self.get_url('.'))
436
421
t.mkdir('repository')
437
422
repo_dir = bzrdir.BzrDirMetaFormat1().initialize('repository')
438
repo = weaverepo.RepositoryFormat7().initialize(repo_dir)
439
target_format = knitrepo.RepositoryFormatKnit1()
423
repo = repository.RepositoryFormat7().initialize(repo_dir)
424
target_format = repository.RepositoryFormatKnit1()
440
425
converter = repository.CopyConverter(target_format)
441
426
pb = bzrlib.ui.ui_factory.nested_progress_bar()
459
444
def test_convert(self):
460
445
"""Ensure the upgrade adds weaves for roots"""
461
446
format = bzrdir.BzrDirMetaFormat1()
462
format.repository_format = knitrepo.RepositoryFormatKnit1()
447
format.repository_format = repository.RepositoryFormatKnit1()
463
448
tree = self.make_branch_and_tree('.', format)
464
449
tree.commit("Dull commit", rev_id="dull")
465
450
revision_tree = tree.branch.repository.revision_tree('dull')
466
451
self.assertRaises(errors.NoSuchFile, revision_tree.get_file_lines,
467
452
revision_tree.inventory.root.file_id)
468
453
format = bzrdir.BzrDirMetaFormat1()
469
format.repository_format = knitrepo.RepositoryFormatKnit2()
454
format.repository_format = repository.RepositoryFormatKnit2()
470
455
upgrade.Convert('.', format)
471
456
tree = workingtree.WorkingTree.open('.')
472
457
revision_tree = tree.branch.repository.revision_tree('dull')