~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_repository.py

  • Committer: Vincent Ladeuil
  • Date: 2012-03-14 10:17:12 UTC
  • mto: This revision was merged to the branch mainline in revision 6501.
  • Revision ID: v.ladeuil+lp@free.fr-20120314101712-8m19vlkis5yr0xtp
Yet more deprecated code removals

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
    )
32
32
from bzrlib import (
33
33
    btree_index,
34
 
    graph,
35
34
    symbol_versioning,
36
35
    tests,
37
36
    transport,
 
37
    vf_search,
38
38
    )
39
39
from bzrlib.btree_index import BTreeBuilder, BTreeGraphIndex
40
40
from bzrlib.index import GraphIndex
45
45
    )
46
46
from bzrlib import (
47
47
    bzrdir,
 
48
    controldir,
48
49
    errors,
49
50
    inventory,
50
51
    osutils,
66
67
class TestDefaultFormat(TestCase):
67
68
 
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()
76
77
            return my_bzrdir
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.
81
82
        try:
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')
87
88
        finally:
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__)
93
94
 
94
95
 
95
 
class SampleRepositoryFormat(repository.RepositoryFormat):
 
96
class SampleRepositoryFormat(repository.RepositoryFormatMetaDir):
96
97
    """A sample format
97
98
 
98
99
    this format is initializable, unsupported to aid in testing the
99
100
    open and open(unsupported=True) routines.
100
101
    """
101
102
 
102
 
    def get_format_string(self):
 
103
    @classmethod
 
104
    def get_format_string(cls):
103
105
        """See RepositoryFormat.get_format_string()."""
104
106
        return "Sample .bzr repository format."
105
107
 
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")
143
145
 
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,
148
150
                          dir)
149
151
 
 
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.")
 
160
 
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,
155
166
                          dir)
156
167
 
 
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,
 
175
            True)
 
176
        self.addCleanup(repository.RepositoryFormatMetaDir.unregister_feature,
 
177
            "name")
 
178
        repository.RepositoryFormatMetaDir.register_feature("name")
 
179
        found_format.check_support_status(True)
 
180
 
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)
218
242
 
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)
224
248
 
225
249
    def test_disk_layout(self):
311
335
        is valid when the api is not being abused.
312
336
        """
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
332
356
 
333
357
    def test_supports_external_lookups(self):
334
358
        repo = self.make_repository('.',
335
 
                format=bzrdir.format_registry.get('knit')())
 
359
                format=controldir.format_registry.get('knit')())
336
360
        self.assertFalse(repo._format.supports_external_lookups)
337
361
 
338
362
 
438
462
 
439
463
class TestRepositoryFormat1(knitrepo.RepositoryFormatKnit1):
440
464
 
441
 
    def get_format_string(self):
 
465
    @classmethod
 
466
    def get_format_string(cls):
442
467
        return "Test Format 1"
443
468
 
444
469
 
445
470
class TestRepositoryFormat2(knitrepo.RepositoryFormatKnit1):
446
471
 
447
 
    def get_format_string(self):
 
472
    @classmethod
 
473
    def get_format_string(cls):
448
474
        return "Test Format 2"
449
475
 
450
476
 
499
525
        revision_tree.lock_read()
500
526
        try:
501
527
            self.assertRaises(errors.NoSuchFile, revision_tree.get_file_lines,
502
 
                revision_tree.inventory.root.file_id)
 
528
                revision_tree.get_root_id())
503
529
        finally:
504
530
            revision_tree.unlock()
505
531
        format = bzrdir.BzrDirMetaFormat1()
509
535
        revision_tree = tree.branch.repository.revision_tree('dull')
510
536
        revision_tree.lock_read()
511
537
        try:
512
 
            revision_tree.get_file_lines(revision_tree.inventory.root.file_id)
 
538
            revision_tree.get_file_lines(revision_tree.get_root_id())
513
539
        finally:
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()))
520
547
 
521
548
    def test_supports_external_lookups(self):
522
549
        format = bzrdir.BzrDirMetaFormat1()
706
733
 
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,
710
737
                                    set(['rev-2']))
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)
897
924
 
898
925
            # make rev1b, which has no Revision, but has an Inventory, and
899
926
            # file1
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)
938
965
 
939
966
    def add_file(self, repo, inv, filename, revision, parents):
940
967
        file_id = filename + '-id'
968
995
class TestRepositoryPackCollection(TestCaseWithTransport):
969
996
 
970
997
    def get_format(self):
971
 
        return bzrdir.format_registry.make_bzrdir('pack-0.92')
 
998
        return controldir.format_registry.make_bzrdir('pack-0.92')
972
999
 
973
1000
    def get_packs(self):
974
1001
        format = self.get_format()
1070
1097
            sorted(set([osutils.splitext(n)[0] for n in
1071
1098
                        packs._index_transport.list_dir('.')])))
1072
1099
 
 
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
 
1108
        # are still renamed
 
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('.')])))
 
1116
 
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))
1347
1391
 
 
1392
    def test_pack_no_obsolete_packs_directory(self):
 
1393
        """Bug #314314, don't fail if obsolete_packs directory does
 
1394
        not exist."""
 
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()
1348
1398
 
1349
1399
 
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)
 
1713
 
 
1714
 
 
1715
class Test_LazyListJoin(tests.TestCase):
 
1716
 
 
1717
    def test__repr__(self):
 
1718
        lazy = repository._LazyListJoin(['a'], ['b'])
 
1719
        self.assertEqual("bzrlib.repository._LazyListJoin((['a'], ['b']))",
 
1720
                         repr(lazy))
 
1721
 
 
1722
 
 
1723
class TestFeatures(tests.TestCaseWithTransport):
 
1724
 
 
1725
    def test_open_with_present_feature(self):
 
1726
        self.addCleanup(
 
1727
            repository.RepositoryFormatMetaDir.unregister_feature,
 
1728
            "makes-cheese-sandwich")
 
1729
        repository.RepositoryFormatMetaDir.register_feature(
 
1730
            "makes-cheese-sandwich")
 
1731
        repo = self.make_repository('.')
 
1732
        repo.lock_write()
 
1733
        repo._format.features["makes-cheese-sandwich"] = "required"
 
1734
        repo._format.check_support_status(False)
 
1735
        repo.unlock()
 
1736
 
 
1737
    def test_open_with_missing_required_feature(self):
 
1738
        repo = self.make_repository('.')
 
1739
        repo.lock_write()
 
1740
        repo._format.features["makes-cheese-sandwich"] = "required"
 
1741
        self.assertRaises(errors.MissingFeature,
 
1742
            repo._format.check_support_status, False)