66
67
class TestDefaultFormat(TestCase):
68
69
def test_get_set_default_format(self):
69
old_default = bzrdir.format_registry.get('default')
70
old_default = controldir.format_registry.get('default')
70
71
private_default = old_default().repository_format.__class__
71
72
old_format = repository.format_registry.get_default()
72
73
self.assertTrue(isinstance(old_format, private_default))
74
75
my_bzrdir = bzrdir.BzrDirMetaFormat1()
75
76
my_bzrdir.repository_format = SampleRepositoryFormat()
77
bzrdir.format_registry.remove('default')
78
bzrdir.format_registry.register('sample', make_sample_bzrdir, '')
79
bzrdir.format_registry.set_default('sample')
78
controldir.format_registry.remove('default')
79
controldir.format_registry.register('sample', make_sample_bzrdir, '')
80
controldir.format_registry.set_default('sample')
80
81
# creating a repository should now create an instrumented dir.
82
83
# the default branch format is used by the meta dir format
85
86
result = dir.create_repository()
86
87
self.assertEqual(result, 'A bzr repository dir')
88
bzrdir.format_registry.remove('default')
89
bzrdir.format_registry.remove('sample')
90
bzrdir.format_registry.register('default', old_default, '')
89
controldir.format_registry.remove('default')
90
controldir.format_registry.remove('sample')
91
controldir.format_registry.register('default', old_default, '')
91
92
self.assertIsInstance(repository.format_registry.get_default(),
92
93
old_format.__class__)
95
class SampleRepositoryFormat(repository.RepositoryFormat):
96
class SampleRepositoryFormat(repository.RepositoryFormatMetaDir):
98
99
this format is initializable, unsupported to aid in testing the
99
100
open and open(unsupported=True) routines.
102
def get_format_string(self):
104
def get_format_string(cls):
103
105
"""See RepositoryFormat.get_format_string()."""
104
106
return "Sample .bzr repository format."
136
138
def check_format(format, url):
137
139
dir = format._matchingbzrdir.initialize(url)
138
140
format.initialize(dir)
139
t = transport.get_transport(url)
140
found_format = repository.RepositoryFormat.find_format(dir)
141
t = transport.get_transport_from_path(url)
142
found_format = repository.RepositoryFormatMetaDir.find_format(dir)
141
143
self.assertIsInstance(found_format, format.__class__)
142
144
check_format(repository.format_registry.get_default(), "bar")
144
146
def test_find_format_no_repository(self):
145
147
dir = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
146
148
self.assertRaises(errors.NoRepositoryPresent,
147
repository.RepositoryFormat.find_format,
149
repository.RepositoryFormatMetaDir.find_format,
152
def test_from_string(self):
153
self.assertIsInstance(
154
SampleRepositoryFormat.from_string(
155
"Sample .bzr repository format."),
156
SampleRepositoryFormat)
157
self.assertRaises(AssertionError,
158
SampleRepositoryFormat.from_string,
159
"Different .bzr repository format.")
150
161
def test_find_format_unknown_format(self):
151
162
dir = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
152
163
SampleRepositoryFormat().initialize(dir)
153
164
self.assertRaises(UnknownFormatError,
154
repository.RepositoryFormat.find_format,
165
repository.RepositoryFormatMetaDir.find_format,
168
def test_find_format_with_features(self):
169
tree = self.make_branch_and_tree('.', format='2a')
170
tree.branch.repository.update_feature_flags({"name": "necessity"})
171
found_format = repository.RepositoryFormatMetaDir.find_format(tree.bzrdir)
172
self.assertIsInstance(found_format, repository.RepositoryFormatMetaDir)
173
self.assertEquals(found_format.features.get("name"), "necessity")
174
self.assertRaises(errors.MissingFeature, found_format.check_support_status,
176
self.addCleanup(repository.RepositoryFormatMetaDir.unregister_feature,
178
repository.RepositoryFormatMetaDir.register_feature("name")
179
found_format.check_support_status(True)
157
181
def test_register_unregister_format(self):
158
182
# Test deprecated format registration functions
159
183
format = SampleRepositoryFormat()
213
237
def test_attribute__fetch_order(self):
214
238
"""Knits need topological data insertion."""
215
239
repo = self.make_repository('.',
216
format=bzrdir.format_registry.get('knit')())
240
format=controldir.format_registry.get('knit')())
217
241
self.assertEqual('topological', repo._format._fetch_order)
219
243
def test_attribute__fetch_uses_deltas(self):
220
244
"""Knits reuse deltas."""
221
245
repo = self.make_repository('.',
222
format=bzrdir.format_registry.get('knit')())
246
format=controldir.format_registry.get('knit')())
223
247
self.assertEqual(True, repo._format._fetch_uses_deltas)
225
249
def test_disk_layout(self):
311
335
is valid when the api is not being abused.
313
337
repo = self.make_repository('.',
314
format=bzrdir.format_registry.get('knit')())
338
format=controldir.format_registry.get('knit')())
315
339
inv_xml = '<inventory format="5">\n</inventory>\n'
316
340
inv = repo._deserialise_inventory('test-rev-id', inv_xml)
317
341
self.assertEqual('test-rev-id', inv.root.revision)
319
343
def test_deserialise_uses_global_revision_id(self):
320
344
"""If it is set, then we re-use the global revision id"""
321
345
repo = self.make_repository('.',
322
format=bzrdir.format_registry.get('knit')())
346
format=controldir.format_registry.get('knit')())
323
347
inv_xml = ('<inventory format="5" revision_id="other-rev-id">\n'
324
348
'</inventory>\n')
325
349
# Arguably, the deserialise_inventory should detect a mismatch, and
509
535
revision_tree = tree.branch.repository.revision_tree('dull')
510
536
revision_tree.lock_read()
512
revision_tree.get_file_lines(revision_tree.inventory.root.file_id)
538
revision_tree.get_file_lines(revision_tree.get_root_id())
514
540
revision_tree.unlock()
515
541
tree.commit("Another dull commit", rev_id='dull2')
516
542
revision_tree = tree.branch.repository.revision_tree('dull2')
517
543
revision_tree.lock_read()
518
544
self.addCleanup(revision_tree.unlock)
519
self.assertEqual('dull', revision_tree.inventory.root.revision)
545
self.assertEqual('dull',
546
revision_tree.get_file_revision(revision_tree.get_root_id()))
521
548
def test_supports_external_lookups(self):
522
549
format = bzrdir.BzrDirMetaFormat1()
707
734
# On a regular pass, getting the inventories and chk pages for rev-2
708
735
# would only get the newly created chk pages
709
search = graph.SearchResult(set(['rev-2']), set(['rev-1']), 1,
736
search = vf_search.SearchResult(set(['rev-2']), set(['rev-1']), 1,
711
738
simple_chk_records = []
712
739
for vf_name, substream in source.get_stream(search):
893
920
revision = _mod_revision.Revision('rev1a',
894
921
committer='jrandom@example.com', timestamp=0,
895
922
inventory_sha1='', timezone=0, message='foo', parent_ids=[])
896
repo.add_revision('rev1a',revision, inv)
923
repo.add_revision('rev1a', revision, inv)
898
925
# make rev1b, which has no Revision, but has an Inventory, and
934
961
revision = _mod_revision.Revision(revision_id,
935
962
committer='jrandom@example.com', timestamp=0, inventory_sha1='',
936
963
timezone=0, message='foo', parent_ids=parent_ids)
937
repo.add_revision(revision_id,revision, inv)
964
repo.add_revision(revision_id, revision, inv)
939
966
def add_file(self, repo, inv, filename, revision, parents):
940
967
file_id = filename + '-id'
1070
1097
sorted(set([osutils.splitext(n)[0] for n in
1071
1098
packs._index_transport.list_dir('.')])))
1100
def test__obsolete_packs_missing_directory(self):
1101
tree, r, packs, revs = self.make_packs_and_alt_repo(write_lock=True)
1102
r.control_transport.rmdir('obsolete_packs')
1103
names = packs.names()
1104
pack = packs.get_pack_by_name(names[0])
1105
# Schedule this one for removal
1106
packs._remove_pack_from_memory(pack)
1107
# Now trigger the obsoletion, and ensure that all the remaining files
1109
packs._obsolete_packs([pack])
1110
self.assertEqual([n + '.pack' for n in names[1:]],
1111
sorted(packs._pack_transport.list_dir('.')))
1112
# names[0] should not be present in the index anymore
1113
self.assertEqual(names[1:],
1114
sorted(set([osutils.splitext(n)[0] for n in
1115
packs._index_transport.list_dir('.')])))
1073
1117
def test_pack_distribution_zero(self):
1074
1118
packs = self.get_packs()
1075
1119
self.assertEqual([0], packs.pack_distribution(0))
1345
1389
obsolete_names = set([osutils.splitext(n)[0] for n in obsolete_packs])
1346
1390
self.assertEqual([pack.name], sorted(obsolete_names))
1392
def test_pack_no_obsolete_packs_directory(self):
1393
"""Bug #314314, don't fail if obsolete_packs directory does
1395
tree, r, packs, revs = self.make_packs_and_alt_repo(write_lock=True)
1396
r.control_transport.rmdir('obsolete_packs')
1397
packs._clear_obsolete_packs()
1350
1400
class TestPack(TestCaseWithTransport):
1660
1710
def test_IDS_format_same_no(self):
1661
1711
# When the formats are the same, pack is not called.
1662
1712
self.run_fetch('2a', '2a', False)
1715
class Test_LazyListJoin(tests.TestCase):
1717
def test__repr__(self):
1718
lazy = repository._LazyListJoin(['a'], ['b'])
1719
self.assertEqual("bzrlib.repository._LazyListJoin((['a'], ['b']))",
1723
class TestFeatures(tests.TestCaseWithTransport):
1725
def test_open_with_present_feature(self):
1727
repository.RepositoryFormatMetaDir.unregister_feature,
1728
"makes-cheese-sandwich")
1729
repository.RepositoryFormatMetaDir.register_feature(
1730
"makes-cheese-sandwich")
1731
repo = self.make_repository('.')
1733
repo._format.features["makes-cheese-sandwich"] = "required"
1734
repo._format.check_support_status(False)
1737
def test_open_with_missing_required_feature(self):
1738
repo = self.make_repository('.')
1740
repo._format.features["makes-cheese-sandwich"] = "required"
1741
self.assertRaises(errors.MissingFeature,
1742
repo._format.check_support_status, False)