/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/tests/test_repository.py

  • Committer: Jelmer Vernooij
  • Date: 2018-04-02 00:52:27 UTC
  • mfrom: (6939 work)
  • mto: This revision was merged to the branch mainline in revision 7274.
  • Revision ID: jelmer@jelmer.uk-20180402005227-pecflp1mvdjrjqd6
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
105
105
    @classmethod
106
106
    def get_format_string(cls):
107
107
        """See RepositoryFormat.get_format_string()."""
108
 
        return "Sample .bzr repository format."
 
108
        return b"Sample .bzr repository format."
109
109
 
110
110
    def initialize(self, a_controldir, shared=False):
111
111
        """Initialize a repository in a BzrDir"""
138
138
        # this is not quite the same as
139
139
        self.build_tree(["foo/", "bar/"])
140
140
        def check_format(format, url):
141
 
            dir = format._matchingbzrdir.initialize(url)
 
141
            dir = format._matchingcontroldir.initialize(url)
142
142
            format.initialize(dir)
143
143
            t = transport.get_transport_from_path(url)
144
144
            found_format = bzrrepository.RepositoryFormatMetaDir.find_format(dir)
154
154
    def test_from_string(self):
155
155
        self.assertIsInstance(
156
156
            SampleRepositoryFormat.from_string(
157
 
                "Sample .bzr repository format."),
 
157
                b"Sample .bzr repository format."),
158
158
            SampleRepositoryFormat)
159
159
        self.assertRaises(AssertionError,
160
160
            SampleRepositoryFormat.from_string,
161
 
                "Different .bzr repository format.")
 
161
                b"Different .bzr repository format.")
162
162
 
163
163
    def test_find_format_unknown_format(self):
164
164
        dir = bzrdir.BzrDirMetaFormat1().initialize(self.get_url())
169
169
 
170
170
    def test_find_format_with_features(self):
171
171
        tree = self.make_branch_and_tree('.', format='2a')
172
 
        tree.branch.repository.update_feature_flags({"name": "necessity"})
 
172
        tree.branch.repository.update_feature_flags({b"name": b"necessity"})
173
173
        found_format = bzrrepository.RepositoryFormatMetaDir.find_format(tree.controldir)
174
174
        self.assertIsInstance(found_format, bzrrepository.RepositoryFormatMetaDir)
175
 
        self.assertEqual(found_format.features.get("name"), "necessity")
 
175
        self.assertEqual(found_format.features.get(b"name"), b"necessity")
176
176
        self.assertRaises(bzrdir.MissingFeature, found_format.check_support_status,
177
177
            True)
178
178
        self.addCleanup(bzrrepository.RepositoryFormatMetaDir.unregister_feature,
179
 
            "name")
180
 
        bzrrepository.RepositoryFormatMetaDir.register_feature("name")
 
179
            b"name")
 
180
        bzrrepository.RepositoryFormatMetaDir.register_feature(b"name")
181
181
        found_format.check_support_status(True)
182
182
 
183
183
 
190
190
    def test_register_unregister_format(self):
191
191
        format = SampleRepositoryFormat()
192
192
        self.registry.register(format)
193
 
        self.assertEqual(format, self.registry.get("Sample .bzr repository format."))
 
193
        self.assertEqual(format, self.registry.get(b"Sample .bzr repository format."))
194
194
        self.registry.remove(format)
195
 
        self.assertRaises(KeyError, self.registry.get, "Sample .bzr repository format.")
 
195
        self.assertRaises(KeyError, self.registry.get, b"Sample .bzr repository format.")
196
196
 
197
197
    def test_get_all(self):
198
198
        format = SampleRepositoryFormat()
252
252
        branch = control.create_branch()
253
253
        tree = control.create_workingtree()
254
254
        tree.add(['foo'], ['Nasty-IdC:'], ['file'])
255
 
        tree.put_file_bytes_non_atomic('Nasty-IdC:', '')
256
 
        tree.commit('1st post', rev_id='foo')
 
255
        tree.put_file_bytes_non_atomic('foo', '')
 
256
        tree.commit('1st post', rev_id=b'foo')
257
257
        self.assertHasKnit(t, 'knits/e8/%254easty-%2549d%2543%253a',
258
258
            '\nfoo fulltext 0 81  :')
259
259
 
447
447
 
448
448
    @classmethod
449
449
    def get_format_string(cls):
450
 
        return "Test Format 1"
 
450
        return b"Test Format 1"
451
451
 
452
452
 
453
453
class TestRepositoryFormat2(knitrepo.RepositoryFormatKnit1):
454
454
 
455
455
    @classmethod
456
456
    def get_format_string(cls):
457
 
        return "Test Format 2"
 
457
        return b"Test Format 2"
458
458
 
459
459
 
460
460
class TestRepositoryConverter(TestCaseWithTransport):
473
473
        repo_dir = bzrdir.BzrDirMetaFormat1().initialize('repository')
474
474
        repo = TestRepositoryFormat1().initialize(repo_dir)
475
475
        converter = repository.CopyConverter(target_format)
476
 
        pb = breezy.ui.ui_factory.nested_progress_bar()
477
 
        try:
 
476
        with breezy.ui.ui_factory.nested_progress_bar() as pb:
478
477
            converter.convert(repo, pb)
479
 
        finally:
480
 
            pb.finished()
481
478
        repo = repo_dir.open_repository()
482
479
        self.assertTrue(isinstance(target_format, repo._format.__class__))
483
480
 
508
505
        revision_tree.lock_read()
509
506
        try:
510
507
            self.assertRaises(errors.NoSuchFile, revision_tree.get_file_lines,
511
 
                revision_tree.get_root_id())
 
508
                u'', revision_tree.get_root_id())
512
509
        finally:
513
510
            revision_tree.unlock()
514
511
        format = bzrdir.BzrDirMetaFormat1()
518
515
        revision_tree = tree.branch.repository.revision_tree('dull')
519
516
        revision_tree.lock_read()
520
517
        try:
521
 
            revision_tree.get_file_lines(revision_tree.get_root_id())
 
518
            revision_tree.get_file_lines(u'', revision_tree.get_root_id())
522
519
        finally:
523
520
            revision_tree.unlock()
524
 
        tree.commit("Another dull commit", rev_id='dull2')
 
521
        tree.commit("Another dull commit", rev_id=b'dull2')
525
522
        revision_tree = tree.branch.repository.revision_tree('dull2')
526
523
        revision_tree.lock_read()
527
524
        self.addCleanup(revision_tree.unlock)
528
525
        self.assertEqual('dull',
529
 
                revision_tree.get_file_revision(revision_tree.get_root_id()))
 
526
                revision_tree.get_file_revision(u'', revision_tree.get_root_id()))
530
527
 
531
528
    def test_supports_external_lookups(self):
532
529
        format = bzrdir.BzrDirMetaFormat1()
541
538
        mt = self.make_branch_and_memory_tree('test', format='2a')
542
539
        mt.lock_write()
543
540
        self.addCleanup(mt.unlock)
544
 
        mt.add([''], ['root-id'])
 
541
        mt.add([''], [b'root-id'])
545
542
        mt.commit('first')
546
543
        index = mt.branch.repository.chk_bytes._index._graph_index._indices[0]
547
544
        self.assertEqual(btree_index._gcchk_factory, index._leaf_factory)
555
552
    def test_fetch_combines_groups(self):
556
553
        builder = self.make_branch_builder('source', format='2a')
557
554
        builder.start_series()
558
 
        builder.build_snapshot('1', None, [
559
 
            ('add', ('', 'root-id', 'directory', '')),
560
 
            ('add', ('file', 'file-id', 'file', 'content\n'))])
561
 
        builder.build_snapshot('2', ['1'], [
562
 
            ('modify', ('file-id', 'content-2\n'))])
563
 
        builder.finish_series()
564
 
        source = builder.get_branch()
565
 
        target = self.make_repository('target', format='2a')
566
 
        target.fetch(source.repository)
567
 
        target.lock_read()
568
 
        self.addCleanup(target.unlock)
569
 
        details = target.texts._index.get_build_details(
570
 
            [('file-id', '1',), ('file-id', '2',)])
571
 
        file_1_details = details[('file-id', '1')]
572
 
        file_2_details = details[('file-id', '2')]
573
 
        # The index, and what to read off disk, should be the same for both
574
 
        # versions of the file.
575
 
        self.assertEqual(file_1_details[0][:3], file_2_details[0][:3])
576
 
 
577
 
    def test_fetch_combines_groups(self):
578
 
        builder = self.make_branch_builder('source', format='2a')
579
 
        builder.start_series()
580
 
        builder.build_snapshot('1', None, [
581
 
            ('add', ('', 'root-id', 'directory', '')),
582
 
            ('add', ('file', 'file-id', 'file', 'content\n'))])
583
 
        builder.build_snapshot('2', ['1'], [
584
 
            ('modify', ('file-id', 'content-2\n'))])
585
 
        builder.finish_series()
586
 
        source = builder.get_branch()
587
 
        target = self.make_repository('target', format='2a')
588
 
        target.fetch(source.repository)
589
 
        target.lock_read()
590
 
        self.addCleanup(target.unlock)
591
 
        details = target.texts._index.get_build_details(
592
 
            [('file-id', '1',), ('file-id', '2',)])
593
 
        file_1_details = details[('file-id', '1')]
594
 
        file_2_details = details[('file-id', '2')]
595
 
        # The index, and what to read off disk, should be the same for both
596
 
        # versions of the file.
597
 
        self.assertEqual(file_1_details[0][:3], file_2_details[0][:3])
598
 
 
599
 
    def test_fetch_combines_groups(self):
600
 
        builder = self.make_branch_builder('source', format='2a')
601
 
        builder.start_series()
602
 
        builder.build_snapshot('1', None, [
603
 
            ('add', ('', 'root-id', 'directory', '')),
604
 
            ('add', ('file', 'file-id', 'file', 'content\n'))])
605
 
        builder.build_snapshot('2', ['1'], [
606
 
            ('modify', ('file-id', 'content-2\n'))])
607
 
        builder.finish_series()
608
 
        source = builder.get_branch()
609
 
        target = self.make_repository('target', format='2a')
610
 
        target.fetch(source.repository)
611
 
        target.lock_read()
612
 
        self.addCleanup(target.unlock)
613
 
        details = target.texts._index.get_build_details(
614
 
            [('file-id', '1',), ('file-id', '2',)])
615
 
        file_1_details = details[('file-id', '1')]
616
 
        file_2_details = details[('file-id', '2')]
 
555
        builder.build_snapshot(None, [
 
556
            ('add', ('', b'root-id', 'directory', '')),
 
557
            ('add', ('file', b'file-id', 'file', b'content\n'))],
 
558
            revision_id='1')
 
559
        builder.build_snapshot([b'1'], [
 
560
            ('modify', ('file', b'content-2\n'))],
 
561
            revision_id=b'2')
 
562
        builder.finish_series()
 
563
        source = builder.get_branch()
 
564
        target = self.make_repository('target', format='2a')
 
565
        target.fetch(source.repository)
 
566
        target.lock_read()
 
567
        self.addCleanup(target.unlock)
 
568
        details = target.texts._index.get_build_details(
 
569
            [(b'file-id', b'1',), (b'file-id', b'2',)])
 
570
        file_1_details = details[(b'file-id', b'1')]
 
571
        file_2_details = details[(b'file-id', b'2')]
 
572
        # The index, and what to read off disk, should be the same for both
 
573
        # versions of the file.
 
574
        self.assertEqual(file_1_details[0][:3], file_2_details[0][:3])
 
575
 
 
576
    def test_fetch_combines_groups(self):
 
577
        builder = self.make_branch_builder('source', format='2a')
 
578
        builder.start_series()
 
579
        builder.build_snapshot(None, [
 
580
            ('add', ('', b'root-id', 'directory', '')),
 
581
            ('add', ('file', b'file-id', 'file', 'content\n'))],
 
582
            revision_id=b'1')
 
583
        builder.build_snapshot([b'1'], [
 
584
            ('modify', ('file', b'content-2\n'))],
 
585
            revision_id=b'2')
 
586
        builder.finish_series()
 
587
        source = builder.get_branch()
 
588
        target = self.make_repository('target', format='2a')
 
589
        target.fetch(source.repository)
 
590
        target.lock_read()
 
591
        self.addCleanup(target.unlock)
 
592
        details = target.texts._index.get_build_details(
 
593
            [(b'file-id', b'1',), (b'file-id', b'2',)])
 
594
        file_1_details = details[(b'file-id', b'1')]
 
595
        file_2_details = details[(b'file-id', b'2')]
 
596
        # The index, and what to read off disk, should be the same for both
 
597
        # versions of the file.
 
598
        self.assertEqual(file_1_details[0][:3], file_2_details[0][:3])
 
599
 
 
600
    def test_fetch_combines_groups(self):
 
601
        builder = self.make_branch_builder('source', format='2a')
 
602
        builder.start_series()
 
603
        builder.build_snapshot(None, [
 
604
            ('add', ('', b'root-id', 'directory', '')),
 
605
            ('add', ('file', b'file-id', 'file', 'content\n'))],
 
606
            revision_id=b'1')
 
607
        builder.build_snapshot([b'1'], [
 
608
            ('modify', ('file', b'content-2\n'))],
 
609
            revision_id=b'2')
 
610
        builder.finish_series()
 
611
        source = builder.get_branch()
 
612
        target = self.make_repository('target', format='2a')
 
613
        target.fetch(source.repository)
 
614
        target.lock_read()
 
615
        self.addCleanup(target.unlock)
 
616
        details = target.texts._index.get_build_details(
 
617
            [(b'file-id', b'1',), (b'file-id', b'2',)])
 
618
        file_1_details = details[(b'file-id', b'1')]
 
619
        file_2_details = details[(b'file-id', b'2')]
617
620
        # The index, and what to read off disk, should be the same for both
618
621
        # versions of the file.
619
622
        self.assertEqual(file_1_details[0][:3], file_2_details[0][:3])
625
628
    def test_inventories_use_chk_map_with_parent_base_dict(self):
626
629
        tree = self.make_branch_and_memory_tree('repo', format="2a")
627
630
        tree.lock_write()
628
 
        tree.add([''], ['TREE_ROOT'])
 
631
        tree.add([''], [b'TREE_ROOT'])
629
632
        revid = tree.commit("foo")
630
633
        tree.unlock()
631
634
        tree.lock_read()
646
649
        tree = self.make_branch_and_memory_tree('tree', format='2a')
647
650
        tree.lock_write()
648
651
        self.addCleanup(tree.unlock)
649
 
        tree.add([''], ['TREE_ROOT'])
 
652
        tree.add([''], [b'TREE_ROOT'])
650
653
        for pos in range(20):
651
654
            tree.commit(str(pos))
652
655
 
654
657
        tree = self.make_branch_and_memory_tree('tree', format='2a')
655
658
        tree.lock_write()
656
659
        self.addCleanup(tree.unlock)
657
 
        tree.add([''], ['TREE_ROOT'])
 
660
        tree.add([''], [b'TREE_ROOT'])
658
661
        # 1 commit to leave untouched
659
662
        tree.commit('1')
660
663
        to_keep = tree.branch.repository._pack_collection.names()
690
693
                            format='2a')
691
694
        # We have to build a fairly large tree, so that we are sure the chk
692
695
        # pages will have split into multiple pages.
693
 
        entries = [('add', ('', 'a-root-id', 'directory', None))]
 
696
        entries = [('add', ('', b'a-root-id', 'directory', None))]
694
697
        for i in 'abcdefghijklmnopqrstuvwxyz123456789':
695
698
            for j in 'abcdefghijklmnopqrstuvwxyz123456789':
696
699
                fname = i + j
697
 
                fid = fname + '-id'
 
700
                fid = fname.encode('utf-8') + b'-id'
698
701
                content = 'content for %s\n' % (fname,)
699
702
                entries.append(('add', (fname, fid, 'file', content)))
700
703
        source_builder.start_series()
701
 
        source_builder.build_snapshot('rev-1', None, entries)
 
704
        source_builder.build_snapshot(None, entries, revision_id=b'rev-1')
702
705
        # Now change a few of them, so we get a few new pages for the second
703
706
        # revision
704
 
        source_builder.build_snapshot('rev-2', ['rev-1'], [
705
 
            ('modify', ('aa-id', 'new content for aa-id\n')),
706
 
            ('modify', ('cc-id', 'new content for cc-id\n')),
707
 
            ('modify', ('zz-id', 'new content for zz-id\n')),
708
 
            ])
 
707
        source_builder.build_snapshot([b'rev-1'], [
 
708
            ('modify', ('aa', b'new content for aa-id\n')),
 
709
            ('modify', ('cc', b'new content for cc-id\n')),
 
710
            ('modify', ('zz', b'new content for zz-id\n')),
 
711
            ], revision_id=b'rev-2')
709
712
        source_builder.finish_series()
710
713
        source_branch = source_builder.get_branch()
711
714
        source_branch.lock_read()
716
719
 
717
720
        # On a regular pass, getting the inventories and chk pages for rev-2
718
721
        # would only get the newly created chk pages
719
 
        search = vf_search.SearchResult({'rev-2'}, {'rev-1'}, 1,
720
 
                                    {'rev-2'})
 
722
        search = vf_search.SearchResult({b'rev-2'}, {b'rev-1'}, 1,
 
723
                                    {b'rev-2'})
721
724
        simple_chk_records = []
722
725
        for vf_name, substream in source.get_stream(search):
723
726
            if vf_name == 'chk_bytes':
829
832
        super(TestDevelopment6FindParentIdsOfRevisions, self).setUp()
830
833
        self.builder = self.make_branch_builder('source')
831
834
        self.builder.start_series()
832
 
        self.builder.build_snapshot('initial', None,
833
 
            [('add', ('', 'tree-root', 'directory', None))])
 
835
        self.builder.build_snapshot(None,
 
836
            [('add', ('', 'tree-root', 'directory', None))],
 
837
            revision_id='initial')
834
838
        self.repo = self.builder.get_branch().repository
835
839
        self.addCleanup(self.builder.finish_series)
836
840
 
839
843
            sorted(self.repo._find_parent_ids_of_revisions(rev_set)))
840
844
 
841
845
    def test_simple(self):
842
 
        self.builder.build_snapshot('revid1', None, [])
843
 
        self.builder.build_snapshot('revid2', ['revid1'], [])
 
846
        self.builder.build_snapshot(None, [], revision_id='revid1')
 
847
        self.builder.build_snapshot(['revid1'], [], revision_id='revid2')
844
848
        rev_set = ['revid2']
845
849
        self.assertParentIds(['revid1'], rev_set)
846
850
 
847
851
    def test_not_first_parent(self):
848
 
        self.builder.build_snapshot('revid1', None, [])
849
 
        self.builder.build_snapshot('revid2', ['revid1'], [])
850
 
        self.builder.build_snapshot('revid3', ['revid2'], [])
 
852
        self.builder.build_snapshot(None, [], revision_id='revid1')
 
853
        self.builder.build_snapshot(['revid1'], [], revision_id='revid2')
 
854
        self.builder.build_snapshot(['revid2'], [], revision_id='revid3')
851
855
        rev_set = ['revid3', 'revid2']
852
856
        self.assertParentIds(['revid1'], rev_set)
853
857
 
856
860
        self.assertParentIds([], rev_set)
857
861
 
858
862
    def test_not_null_set(self):
859
 
        self.builder.build_snapshot('revid1', None, [])
 
863
        self.builder.build_snapshot(None, [], revision_id='revid1')
860
864
        rev_set = [_mod_revision.NULL_REVISION]
861
865
        self.assertParentIds([], rev_set)
862
866
 
863
867
    def test_ghost(self):
864
 
        self.builder.build_snapshot('revid1', None, [])
 
868
        self.builder.build_snapshot(None, [], revision_id='revid1')
865
869
        rev_set = ['ghost', 'revid1']
866
870
        self.assertParentIds(['initial'], rev_set)
867
871
 
868
872
    def test_ghost_parent(self):
869
 
        self.builder.build_snapshot('revid1', None, [])
870
 
        self.builder.build_snapshot('revid2', ['revid1', 'ghost'], [])
 
873
        self.builder.build_snapshot(None, [], revision_id='revid1')
 
874
        self.builder.build_snapshot(['revid1', 'ghost'], [], revision_id='revid2')
871
875
        rev_set = ['revid2', 'revid1']
872
876
        self.assertParentIds(['ghost', 'initial'], rev_set)
873
877
 
874
878
    def test_righthand_parent(self):
875
 
        self.builder.build_snapshot('revid1', None, [])
876
 
        self.builder.build_snapshot('revid2a', ['revid1'], [])
877
 
        self.builder.build_snapshot('revid2b', ['revid1'], [])
878
 
        self.builder.build_snapshot('revid3', ['revid2a', 'revid2b'], [])
 
879
        self.builder.build_snapshot(None, [], revision_id='revid1')
 
880
        self.builder.build_snapshot(['revid1'], [], revision_id='revid2a')
 
881
        self.builder.build_snapshot(['revid1'], [], revision_id='revid2b')
 
882
        self.builder.build_snapshot(['revid2a', 'revid2b'], [],
 
883
                                    revision_id='revid3')
879
884
        rev_set = ['revid3', 'revid2a']
880
885
        self.assertParentIds(['revid1', 'revid2b'], rev_set)
881
886
 
1467
1472
    def test_pack_optimizes_pack_order(self):
1468
1473
        builder = self.make_branch_builder('.', format="1.9")
1469
1474
        builder.start_series()
1470
 
        builder.build_snapshot('A', None, [
 
1475
        builder.build_snapshot(None, [
1471
1476
            ('add', ('', 'root-id', 'directory', None)),
1472
 
            ('add', ('f', 'f-id', 'file', 'content\n'))])
1473
 
        builder.build_snapshot('B', ['A'],
1474
 
            [('modify', ('f-id', 'new-content\n'))])
1475
 
        builder.build_snapshot('C', ['B'],
1476
 
            [('modify', ('f-id', 'third-content\n'))])
1477
 
        builder.build_snapshot('D', ['C'],
1478
 
            [('modify', ('f-id', 'fourth-content\n'))])
 
1477
            ('add', ('f', 'f-id', 'file', 'content\n'))],
 
1478
            revision_id='A')
 
1479
        builder.build_snapshot(['A'],
 
1480
            [('modify', ('f', 'new-content\n'))],
 
1481
            revision_id='B')
 
1482
        builder.build_snapshot(['B'],
 
1483
            [('modify', ('f', 'third-content\n'))],
 
1484
            revision_id='C')
 
1485
        builder.build_snapshot(['C'],
 
1486
            [('modify', ('f', 'fourth-content\n'))],
 
1487
            revision_id='D')
1479
1488
        b = builder.get_branch()
1480
1489
        b.lock_read()
1481
1490
        builder.finish_series()
1520
1529
    def make_abc_branch(self):
1521
1530
        builder = self.make_branch_builder('source')
1522
1531
        builder.start_series()
1523
 
        builder.build_snapshot('A', None, [
 
1532
        builder.build_snapshot(None, [
1524
1533
            ('add', ('', 'root-id', 'directory', None)),
1525
1534
            ('add', ('file', 'file-id', 'file', 'content\n')),
1526
 
            ])
1527
 
        builder.build_snapshot('B', ['A'], [
1528
 
            ('add', ('dir', 'dir-id', 'directory', None))])
1529
 
        builder.build_snapshot('C', ['B'], [
1530
 
            ('modify', ('file-id', 'new content\n'))])
 
1535
            ], revision_id='A')
 
1536
        builder.build_snapshot(['A'], [
 
1537
            ('add', ('dir', 'dir-id', 'directory', None))],
 
1538
            revision_id='B')
 
1539
        builder.build_snapshot(['B'], [
 
1540
            ('modify', ('file', 'new content\n'))],
 
1541
            revision_id='C')
1531
1542
        builder.finish_series()
1532
1543
        return builder.get_branch()
1533
1544
 
1708
1719
    def test_open_with_present_feature(self):
1709
1720
        self.addCleanup(
1710
1721
            bzrrepository.RepositoryFormatMetaDir.unregister_feature,
1711
 
            "makes-cheese-sandwich")
 
1722
            b"makes-cheese-sandwich")
1712
1723
        bzrrepository.RepositoryFormatMetaDir.register_feature(
1713
 
            "makes-cheese-sandwich")
 
1724
            b"makes-cheese-sandwich")
1714
1725
        repo = self.make_repository('.')
1715
1726
        repo.lock_write()
1716
 
        repo._format.features["makes-cheese-sandwich"] = "required"
 
1727
        repo._format.features[b"makes-cheese-sandwich"] = b"required"
1717
1728
        repo._format.check_support_status(False)
1718
1729
        repo.unlock()
1719
1730
 
1720
1731
    def test_open_with_missing_required_feature(self):
1721
1732
        repo = self.make_repository('.')
1722
1733
        repo.lock_write()
1723
 
        repo._format.features["makes-cheese-sandwich"] = "required"
 
1734
        repo._format.features[b"makes-cheese-sandwich"] = b"required"
1724
1735
        self.assertRaises(bzrdir.MissingFeature,
1725
1736
            repo._format.check_support_status, False)