/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_bzrdir.py

  • Committer: Jelmer Vernooij
  • Date: 2018-11-17 00:47:52 UTC
  • mfrom: (7182 work)
  • mto: This revision was merged to the branch mainline in revision 7305.
  • Revision ID: jelmer@jelmer.uk-20181117004752-6ywampe5pfywlby4
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
99
99
    def make_format_registry(self):
100
100
        my_format_registry = controldir.ControlDirFormatRegistry()
101
101
        my_format_registry.register('deprecated', DeprecatedBzrDirFormat,
102
 
            'Some format.  Slower and unawesome and deprecated.',
103
 
            deprecated=True)
 
102
                                    'Some format.  Slower and unawesome and deprecated.',
 
103
                                    deprecated=True)
104
104
        my_format_registry.register_lazy('lazy', 'breezy.tests.test_bzrdir',
105
 
            'DeprecatedBzrDirFormat', 'Format registered lazily',
106
 
            deprecated=True)
 
105
                                         'DeprecatedBzrDirFormat', 'Format registered lazily',
 
106
                                         deprecated=True)
107
107
        bzr.register_metadir(my_format_registry, 'knit',
108
 
            'breezy.bzr.knitrepo.RepositoryFormatKnit1',
109
 
            'Format using knits',
110
 
            )
 
108
                             'breezy.bzr.knitrepo.RepositoryFormatKnit1',
 
109
                             'Format using knits',
 
110
                             )
111
111
        my_format_registry.set_default('knit')
112
112
        bzr.register_metadir(my_format_registry,
113
 
            'branch6',
114
 
            'breezy.bzr.knitrepo.RepositoryFormatKnit3',
115
 
            'Experimental successor to knit.  Use at your own risk.',
116
 
            branch_format='breezy.bzr.branch.BzrBranchFormat6',
117
 
            experimental=True)
 
113
                             'branch6',
 
114
                             'breezy.bzr.knitrepo.RepositoryFormatKnit3',
 
115
                             'Experimental successor to knit.  Use at your own risk.',
 
116
                             branch_format='breezy.bzr.branch.BzrBranchFormat6',
 
117
                             experimental=True)
118
118
        bzr.register_metadir(my_format_registry,
119
 
            'hidden format',
120
 
            'breezy.bzr.knitrepo.RepositoryFormatKnit3',
121
 
            'Experimental successor to knit.  Use at your own risk.',
122
 
            branch_format='breezy.bzr.branch.BzrBranchFormat6', hidden=True)
 
119
                             'hidden format',
 
120
                             'breezy.bzr.knitrepo.RepositoryFormatKnit3',
 
121
                             'Experimental successor to knit.  Use at your own risk.',
 
122
                             branch_format='breezy.bzr.branch.BzrBranchFormat6', hidden=True)
123
123
        my_format_registry.register('hiddendeprecated', DeprecatedBzrDirFormat,
124
 
            'Old format.  Slower and does not support things. ', hidden=True)
 
124
                                    'Old format.  Slower and does not support things. ', hidden=True)
125
125
        my_format_registry.register_lazy('hiddenlazy', 'breezy.tests.test_bzrdir',
126
 
            'DeprecatedBzrDirFormat', 'Format registered lazily',
127
 
            deprecated=True, hidden=True)
 
126
                                         'DeprecatedBzrDirFormat', 'Format registered lazily',
 
127
                                         deprecated=True, hidden=True)
128
128
        return my_format_registry
129
129
 
130
130
    def test_format_registry(self):
135
135
        self.assertIsInstance(my_bzrdir, DeprecatedBzrDirFormat)
136
136
        my_bzrdir = my_format_registry.make_controldir('default')
137
137
        self.assertIsInstance(my_bzrdir.repository_format,
138
 
            knitrepo.RepositoryFormatKnit1)
 
138
                              knitrepo.RepositoryFormatKnit1)
139
139
        my_bzrdir = my_format_registry.make_controldir('knit')
140
140
        self.assertIsInstance(my_bzrdir.repository_format,
141
 
            knitrepo.RepositoryFormatKnit1)
 
141
                              knitrepo.RepositoryFormatKnit1)
142
142
        my_bzrdir = my_format_registry.make_controldir('branch6')
143
143
        self.assertIsInstance(my_bzrdir.get_branch_format(),
144
144
                              breezy.bzr.branch.BzrBranchFormat6)
166
166
        experimental, deprecated = rest.split('Deprecated formats')
167
167
        self.assertContainsRe(new, 'formats-help')
168
168
        self.assertContainsRe(new,
169
 
                ':knit:\n    \\(native\\) \\(default\\) Format using knits\n')
 
169
                              ':knit:\n    \\(native\\) \\(default\\) Format using knits\n')
170
170
        self.assertContainsRe(experimental,
171
 
                ':branch6:\n    \\(native\\) Experimental successor to knit')
 
171
                              ':branch6:\n    \\(native\\) Experimental successor to knit')
172
172
        self.assertContainsRe(deprecated,
173
 
                ':lazy:\n    \\(native\\) Format registered lazily\n')
 
173
                              ':lazy:\n    \\(native\\) Format registered lazily\n')
174
174
        self.assertNotContainsRe(new, 'hidden')
175
175
 
176
176
    def test_set_default_repository(self):
177
177
        default_factory = controldir.format_registry.get('default')
178
178
        old_default = [k for k, v in controldir.format_registry.iteritems()
179
179
                       if v == default_factory and k != 'default'][0]
180
 
        controldir.format_registry.set_default_repository('dirstate-with-subtree')
 
180
        controldir.format_registry.set_default_repository(
 
181
            'dirstate-with-subtree')
181
182
        try:
182
183
            self.assertIs(controldir.format_registry.get('dirstate-with-subtree'),
183
184
                          controldir.format_registry.get('default'))
190
191
    def test_aliases(self):
191
192
        a_registry = controldir.ControlDirFormatRegistry()
192
193
        a_registry.register('deprecated', DeprecatedBzrDirFormat,
193
 
            'Old format.  Slower and does not support stuff',
194
 
            deprecated=True)
 
194
                            'Old format.  Slower and does not support stuff',
 
195
                            deprecated=True)
195
196
        a_registry.register_alias('deprecatedalias', 'deprecated')
196
197
        self.assertEqual({'deprecatedalias': 'deprecated'},
197
198
                         a_registry.aliases())
282
283
        # is the right format object found for a branch?
283
284
        # create a branch with a few known format objects.
284
285
        bzr.BzrProber.formats.register(BzrDirFormatTest1.get_format_string(),
285
 
            BzrDirFormatTest1())
 
286
                                       BzrDirFormatTest1())
286
287
        self.addCleanup(bzr.BzrProber.formats.remove,
287
 
            BzrDirFormatTest1.get_format_string())
 
288
                        BzrDirFormatTest1.get_format_string())
288
289
        bzr.BzrProber.formats.register(BzrDirFormatTest2.get_format_string(),
289
 
            BzrDirFormatTest2())
 
290
                                       BzrDirFormatTest2())
290
291
        self.addCleanup(bzr.BzrProber.formats.remove,
291
 
            BzrDirFormatTest2.get_format_string())
 
292
                        BzrDirFormatTest2.get_format_string())
292
293
        t = self.get_transport()
293
294
        self.build_tree(["foo/", "bar/"], transport=t)
 
295
 
294
296
        def check_format(format, url):
295
297
            format.initialize(url)
296
298
            t = _mod_transport.get_transport_from_path(url)
330
332
        # which bzrdir.Open will refuse (not supported)
331
333
        self.assertRaises(UnsupportedFormatError, bzrdir.BzrDir.open, url)
332
334
        # which bzrdir.open_containing will refuse (not supported)
333
 
        self.assertRaises(UnsupportedFormatError, bzrdir.BzrDir.open_containing, url)
 
335
        self.assertRaises(UnsupportedFormatError,
 
336
                          bzrdir.BzrDir.open_containing, url)
334
337
        # but open_downlevel will work
335
338
        t = _mod_transport.get_transport_from_url(url)
336
339
        self.assertEqual(format.open(t), bzrdir.BzrDir.open_unsupported(url))
337
340
        # unregister the format
338
341
        bzr.BzrProber.formats.remove(format.get_format_string())
339
342
        # now open_downlevel should fail too.
340
 
        self.assertRaises(UnknownFormatError, bzrdir.BzrDir.open_unsupported, url)
 
343
        self.assertRaises(UnknownFormatError,
 
344
                          bzrdir.BzrDir.open_unsupported, url)
341
345
 
342
346
    def test_create_branch_and_repo_uses_default(self):
343
347
        format = SampleBzrDirFormat()
386
390
                          bzrdir.BzrDir.create_standalone_workingtree,
387
391
                          self.get_readonly_url('child'), format=format)
388
392
        tree = bzrdir.BzrDir.create_standalone_workingtree('child',
389
 
            format=format)
 
393
                                                           format=format)
390
394
        tree.controldir.open_repository()
391
395
 
392
396
    def test_create_branch_convenience(self):
422
426
        format = controldir.format_registry.make_controldir('knit')
423
427
        self.make_repository('.', shared=True, format=format)
424
428
        branch = bzrdir.BzrDir.create_branch_convenience('child',
425
 
            format=format)
 
429
                                                         format=format)
426
430
        branch.controldir.open_workingtree()
427
431
        self.assertRaises(errors.NoRepositoryPresent,
428
432
                          branch.controldir.open_repository)
433
437
        format = controldir.format_registry.make_controldir('knit')
434
438
        self.make_repository('.', shared=True, format=format)
435
439
        branch = bzrdir.BzrDir.create_branch_convenience('child',
436
 
            force_new_tree=False, format=format)
 
440
                                                         force_new_tree=False, format=format)
437
441
        self.assertRaises(errors.NoWorkingTree,
438
442
                          branch.controldir.open_workingtree)
439
443
        self.assertRaises(errors.NoRepositoryPresent,
459
463
        repo = self.make_repository('.', shared=True, format=format)
460
464
        repo.set_make_working_trees(False)
461
465
        branch = bzrdir.BzrDir.create_branch_convenience('child',
462
 
            force_new_tree=True, format=format)
 
466
                                                         force_new_tree=True, format=format)
463
467
        branch.controldir.open_workingtree()
464
468
        self.assertRaises(errors.NoRepositoryPresent,
465
469
                          branch.controldir.open_repository)
470
474
        format = controldir.format_registry.make_controldir('knit')
471
475
        self.make_repository('.', shared=True, format=format)
472
476
        branch = bzrdir.BzrDir.create_branch_convenience('child',
473
 
            force_new_repo=True, format=format)
 
477
                                                         force_new_repo=True, format=format)
474
478
        branch.controldir.open_repository()
475
479
        branch.controldir.open_workingtree()
476
480
 
511
515
 
512
516
    def test_clone_on_transport_obeys_stacking_policy(self):
513
517
        child_branch, new_child_transport = self.prepare_default_stacking()
514
 
        new_child = child_branch.controldir.clone_on_transport(new_child_transport)
 
518
        new_child = child_branch.controldir.clone_on_transport(
 
519
            new_child_transport)
515
520
        self.assertEqual(child_branch.base,
516
521
                         new_child.open_branch().get_stacked_on_url())
517
522
 
539
544
        # Should end up with a 1.9 format (stackable)
540
545
        repo, control, require_stacking, repo_policy = \
541
546
            old_fmt.initialize_on_transport_ex(t,
542
 
                    repo_format_name=repo_name, stacked_on='../trunk',
543
 
                    stack_on_pwd=t.base)
 
547
                                               repo_format_name=repo_name, stacked_on='../trunk',
 
548
                                               stack_on_pwd=t.base)
544
549
        if repo is not None:
545
550
            # Repositories are open write-locked
546
551
            self.assertTrue(repo.is_write_locked())
551
556
        opened = bzrdir.BzrDir.open(t.base)
552
557
        if not isinstance(old_fmt, remote.RemoteBzrDirFormat):
553
558
            self.assertEqual(control._format.network_name(),
554
 
                old_fmt.network_name())
 
559
                             old_fmt.network_name())
555
560
            self.assertEqual(control._format.network_name(),
556
 
                opened._format.network_name())
 
561
                             opened._format.network_name())
557
562
        self.assertEqual(control.__class__, opened.__class__)
558
563
        self.assertLength(1, repo._fallback_repositories)
559
564
 
566
571
    def test_clone_ignores_policy_for_unsupported_formats(self):
567
572
        child_branch, new_child_transport = self.prepare_default_stacking(
568
573
            child_format='pack-0.92')
569
 
        new_child = child_branch.controldir.clone_on_transport(new_child_transport)
 
574
        new_child = child_branch.controldir.clone_on_transport(
 
575
            new_child_transport)
570
576
        self.assertRaises(branch.UnstackableBranchFormat,
571
577
                          new_child.open_branch().get_stacked_on_url)
572
578
 
581
587
        child_branch, new_child_transport = self.prepare_default_stacking(
582
588
            child_format='pack-0.92')
583
589
        new_child = child_branch.controldir.sprout(new_child_transport.base,
584
 
                                               stacked=True)
 
590
                                                   stacked=True)
585
591
        self.assertEqual(child_branch.controldir.root_transport.base,
586
592
                         new_child.open_branch().get_stacked_on_url())
587
593
        repo = new_child.open_repository()
592
598
        child_branch, new_child_transport = self.prepare_default_stacking(
593
599
            child_format='pack-0.92')
594
600
        new_child = child_branch.controldir.clone_on_transport(new_child_transport,
595
 
            stacked_on=child_branch.controldir.root_transport.base)
 
601
                                                               stacked_on=child_branch.controldir.root_transport.base)
596
602
        self.assertEqual(child_branch.controldir.root_transport.base,
597
603
                         new_child.open_branch().get_stacked_on_url())
598
604
        repo = new_child.open_repository()
603
609
        child_branch, new_child_transport = self.prepare_default_stacking(
604
610
            child_format='rich-root-pack')
605
611
        new_child = child_branch.controldir.sprout(new_child_transport.base,
606
 
                                               stacked=True)
 
612
                                                   stacked=True)
607
613
        repo = new_child.open_repository()
608
614
        self.assertTrue(repo._format.supports_external_lookups)
609
615
        self.assertTrue(repo.supports_rich_root())
624
630
        stack_on = self.make_branch('stack_on', format='1.6')
625
631
        stacked = self.make_branch('stack_on/stacked', format='1.6')
626
632
        policy = bzrdir.UseExistingRepository(stacked.repository,
627
 
            '.', stack_on.base)
 
633
                                              '.', stack_on.base)
628
634
        policy.configure_branch(stacked)
629
635
        self.assertEqual('..', stacked.get_stacked_on_url())
630
636
 
632
638
        stack_on = self.make_branch('stack_on', format='1.6')
633
639
        stacked = self.make_branch('stack_on/stacked', format='1.6')
634
640
        policy = bzrdir.UseExistingRepository(stacked.repository,
635
 
            '.', self.get_readonly_url('stack_on'))
 
641
                                              '.', self.get_readonly_url('stack_on'))
636
642
        policy.configure_branch(stacked)
637
643
        self.assertEqual(self.get_readonly_url('stack_on'),
638
644
                         stacked.get_stacked_on_url())
652
658
            self.transport_readonly_server = http_server.HttpServer
653
659
 
654
660
    def local_branch_path(self, branch):
655
 
         return os.path.realpath(urlutils.local_path_from_url(branch.base))
 
661
        return os.path.realpath(urlutils.local_path_from_url(branch.base))
656
662
 
657
663
    def test_open_containing(self):
658
664
        self.assertRaises(NotBranchError, bzrdir.BzrDir.open_containing,
660
666
        self.assertRaises(NotBranchError, bzrdir.BzrDir.open_containing,
661
667
                          self.get_readonly_url('g/p/q'))
662
668
        control = bzrdir.BzrDir.create(self.get_url())
663
 
        branch, relpath = bzrdir.BzrDir.open_containing(self.get_readonly_url(''))
 
669
        branch, relpath = bzrdir.BzrDir.open_containing(
 
670
            self.get_readonly_url(''))
664
671
        self.assertEqual('', relpath)
665
 
        branch, relpath = bzrdir.BzrDir.open_containing(self.get_readonly_url('g/p/q'))
 
672
        branch, relpath = bzrdir.BzrDir.open_containing(
 
673
            self.get_readonly_url('g/p/q'))
666
674
        self.assertEqual('g/p/q', relpath)
667
675
 
668
676
    def test_open_containing_tree_branch_or_repository_empty(self):
669
677
        self.assertRaises(errors.NotBranchError,
670
 
            bzrdir.BzrDir.open_containing_tree_branch_or_repository,
671
 
            self.get_readonly_url(''))
 
678
                          bzrdir.BzrDir.open_containing_tree_branch_or_repository,
 
679
                          self.get_readonly_url(''))
672
680
 
673
681
    def test_open_containing_tree_branch_or_repository_all(self):
674
682
        self.make_branch_and_tree('topdir')
754
762
 
755
763
    def test_open_containing_from_transport(self):
756
764
        self.assertRaises(NotBranchError,
757
 
            bzrdir.BzrDir.open_containing_from_transport,
758
 
            _mod_transport.get_transport_from_url(self.get_readonly_url('')))
 
765
                          bzrdir.BzrDir.open_containing_from_transport,
 
766
                          _mod_transport.get_transport_from_url(self.get_readonly_url('')))
759
767
        self.assertRaises(NotBranchError,
760
 
            bzrdir.BzrDir.open_containing_from_transport,
761
 
            _mod_transport.get_transport_from_url(
762
 
                self.get_readonly_url('g/p/q')))
 
768
                          bzrdir.BzrDir.open_containing_from_transport,
 
769
                          _mod_transport.get_transport_from_url(
 
770
                              self.get_readonly_url('g/p/q')))
763
771
        control = bzrdir.BzrDir.create(self.get_url())
764
772
        branch, relpath = bzrdir.BzrDir.open_containing_from_transport(
765
773
            _mod_transport.get_transport_from_url(
837
845
        tree = self.make_branch_and_tree('tree1',
838
846
                                         format='development-subtree')
839
847
        sub_tree = self.make_branch_and_tree('tree1/subtree',
840
 
            format='development-subtree')
 
848
                                             format='development-subtree')
841
849
        sub_tree.set_root_id(b'subtree-root')
842
850
        tree.add_reference(sub_tree)
843
851
        self.build_tree(['tree1/subtree/file'])
847
855
        tree2.lock_read()
848
856
        self.addCleanup(tree2.unlock)
849
857
        self.assertPathExists('tree2/subtree/file')
850
 
        self.assertEqual(
851
 
                'tree-reference',
852
 
                tree2.kind('subtree', 'subtree-root'))
 
858
        self.assertEqual('tree-reference', tree2.kind('subtree'))
853
859
 
854
860
    def test_cloning_metadir(self):
855
861
        """Ensure that cloning metadir is suitable"""
858
864
        branch = self.make_branch('branch', format='knit')
859
865
        format = branch.controldir.cloning_metadir()
860
866
        self.assertIsInstance(format.workingtree_format,
861
 
            workingtree_4.WorkingTreeFormat6)
 
867
                              workingtree_4.WorkingTreeFormat6)
862
868
 
863
869
    def test_sprout_recursive_treeless(self):
864
870
        tree = self.make_branch_and_tree('tree1',
865
 
            format='development-subtree')
 
871
                                         format='development-subtree')
866
872
        sub_tree = self.make_branch_and_tree('tree1/subtree',
867
 
            format='development-subtree')
 
873
                                             format='development-subtree')
868
874
        tree.add_reference(sub_tree)
869
875
        self.build_tree(['tree1/subtree/file'])
870
876
        sub_tree.add('file')
876
882
        # FIXME: subtree/.bzr is left here which allows the test to pass (or
877
883
        # fail :-( ) -- vila 20100909
878
884
        repo = self.make_repository('repo', shared=True,
879
 
            format='development-subtree')
 
885
                                    format='development-subtree')
880
886
        repo.set_make_working_trees(False)
881
887
        # FIXME: we just deleted the workingtree and now we want to use it ????
882
888
        # At a minimum, we should use tree.branch below (but this fails too
900
906
    def test_find_controldirs(self):
901
907
        foo, bar, baz = self.make_foo_bar_baz()
902
908
        t = self.get_transport()
903
 
        self.assertEqualBzrdirs([baz, foo, bar], bzrdir.BzrDir.find_controldirs(t))
 
909
        self.assertEqualBzrdirs(
 
910
            [baz, foo, bar], bzrdir.BzrDir.find_controldirs(t))
904
911
 
905
912
    def make_fake_permission_denied_transport(self, transport, paths):
906
913
        """Create a transport that raises PermissionDenied for some paths."""
927
934
            self.make_fake_permission_denied_transport(t, ['foo'])
928
935
        # local transport
929
936
        self.assertBranchUrlsEndWith('/baz/',
930
 
            bzrdir.BzrDir.find_controldirs(path_filter_transport))
 
937
                                     bzrdir.BzrDir.find_controldirs(path_filter_transport))
931
938
        # smart server
932
939
        smart_transport = self.make_smart_server('.',
933
 
            backing_server=path_filter_server)
 
940
                                                 backing_server=path_filter_server)
934
941
        self.assertBranchUrlsEndWith('/baz/',
935
 
            bzrdir.BzrDir.find_controldirs(smart_transport))
 
942
                                     bzrdir.BzrDir.find_controldirs(smart_transport))
936
943
 
937
944
    def test_find_controldirs_list_current(self):
938
945
        def list_current(transport):
990
997
        abranch = bzrdir.BzrDir.create(abranch_url).create_branch()
991
998
        t.delete_tree('arepo/.bzr')
992
999
        self.assertRaises(errors.NoRepositoryPresent,
993
 
            branch.Branch.open, abranch_url)
 
1000
                          branch.Branch.open, abranch_url)
994
1001
        self.make_branch('baz')
995
1002
        for actual_bzrdir in bzrdir.BzrDir.find_branches(t):
996
1003
            self.assertEndsWith(actual_bzrdir.user_url, '/baz/')
1007
1014
        self.assertEqual(branch_base,
1008
1015
                         dir.get_branch_transport(BzrBranchFormat5()).base)
1009
1016
        repository_base = t.clone('repository').base
1010
 
        self.assertEqual(repository_base, dir.get_repository_transport(None).base)
 
1017
        self.assertEqual(
 
1018
            repository_base, dir.get_repository_transport(None).base)
1011
1019
        repository_format = repository.format_registry.get_default()
1012
1020
        self.assertEqual(repository_base,
1013
1021
                         dir.get_repository_transport(repository_format).base)
1014
1022
        checkout_base = t.clone('checkout').base
1015
 
        self.assertEqual(checkout_base, dir.get_workingtree_transport(None).base)
 
1023
        self.assertEqual(
 
1024
            checkout_base, dir.get_workingtree_transport(None).base)
1016
1025
        self.assertEqual(checkout_base,
1017
1026
                         dir.get_workingtree_transport(workingtree_3.WorkingTreeFormat3()).base)
1018
1027
 
1034
1043
        otherdir = controldir.format_registry.make_controldir('knit')
1035
1044
        self.assertEqual(otherdir, mydir)
1036
1045
        self.assertFalse(otherdir != mydir)
1037
 
        otherdir2 = controldir.format_registry.make_controldir('development-subtree')
 
1046
        otherdir2 = controldir.format_registry.make_controldir(
 
1047
            'development-subtree')
1038
1048
        self.assertNotEqual(otherdir2, mydir)
1039
1049
        self.assertFalse(otherdir2 == mydir)
1040
1050
 
1096
1106
        # outside a repo the default convenience output is a repo+branch_tree
1097
1107
        format = controldir.format_registry.make_controldir('knit')
1098
1108
        self.assertRaises(errors.NotLocalUrl,
1099
 
            bzrdir.BzrDir.create_branch_convenience,
1100
 
            self.get_url('foo'),
1101
 
            force_new_tree=True,
1102
 
            format=format)
 
1109
                          bzrdir.BzrDir.create_branch_convenience,
 
1110
                          self.get_url('foo'),
 
1111
                          force_new_tree=True,
 
1112
                          format=format)
1103
1113
        t = self.get_transport()
1104
1114
        self.assertFalse(t.has('foo'))
1105
1115
 
1191
1201
        return result
1192
1202
 
1193
1203
 
1194
 
 
1195
1204
class TestHTTPRedirections_nosmart(TestHTTPRedirectionsBase,
1196
 
                                  http_utils.TestCaseWithTwoWebservers):
 
1205
                                   http_utils.TestCaseWithTwoWebservers):
1197
1206
    """Tests redirections for the nosmart decorator"""
1198
1207
 
1199
1208
    _transport = NoSmartTransportDecorator
1224
1233
 
1225
1234
    def get_ls(self):
1226
1235
        f = subprocess.Popen(self.ls, stdout=subprocess.PIPE,
1227
 
            stderr=subprocess.PIPE)
 
1236
                             stderr=subprocess.PIPE)
1228
1237
        out, err = f.communicate()
1229
1238
        self.assertEqual(0, f.returncode, 'Calling %s failed: %s'
1230
1239
                         % (self.ls, err))
1232
1241
 
1233
1242
    def test_dot_bzr_hidden(self):
1234
1243
        if sys.platform == 'win32' and not win32utils.has_win32file:
1235
 
            raise TestSkipped('unable to make file hidden without pywin32 library')
 
1244
            raise TestSkipped(
 
1245
                'unable to make file hidden without pywin32 library')
1236
1246
        b = bzrdir.BzrDir.create('.')
1237
1247
        self.build_tree(['a'])
1238
1248
        self.assertEqual([b'a'], self.get_ls())
1239
1249
 
1240
1250
    def test_dot_bzr_hidden_with_url(self):
1241
1251
        if sys.platform == 'win32' and not win32utils.has_win32file:
1242
 
            raise TestSkipped('unable to make file hidden without pywin32 library')
 
1252
            raise TestSkipped(
 
1253
                'unable to make file hidden without pywin32 library')
1243
1254
        b = bzrdir.BzrDir.create(urlutils.local_path_to_url('.'))
1244
1255
        self.build_tree(['a'])
1245
1256
        self.assertEqual([b'a'], self.get_ls())
1364
1375
 
1365
1376
    def test_pre_open_actual_exceptions_raised(self):
1366
1377
        count = [0]
 
1378
 
1367
1379
        def fail_once(transport):
1368
1380
            count[0] += 1
1369
1381
            if count[0] == 1:
1378
1390
        from ..controldir import RepoInitHookParams
1379
1391
        calls = []
1380
1392
        bzrdir.BzrDir.hooks.install_named_hook('post_repo_init',
1381
 
            calls.append, None)
 
1393
                                               calls.append, None)
1382
1394
        self.make_repository('foo')
1383
1395
        self.assertLength(1, calls)
1384
1396
        params = calls[0]
1389
1401
    def test_post_repo_init_hook_repr(self):
1390
1402
        param_reprs = []
1391
1403
        bzrdir.BzrDir.hooks.install_named_hook('post_repo_init',
1392
 
            lambda params: param_reprs.append(repr(params)), None)
 
1404
                                               lambda params: param_reprs.append(repr(params)), None)
1393
1405
        self.make_repository('foo')
1394
1406
        self.assertLength(1, param_reprs)
1395
1407
        param_repr = param_reprs[0]
1405
1417
        super(TestGenerateBackupName, self).setUp()
1406
1418
        self._transport = self.get_transport()
1407
1419
        bzrdir.BzrDir.create(self.get_url(),
1408
 
            possible_transports=[self._transport])
 
1420
                             possible_transports=[self._transport])
1409
1421
        self._bzrdir = bzrdir.BzrDir.open_from_transport(self._transport)
1410
1422
 
1411
1423
    def test_new(self):
1480
1492
        format = SampleBzrFormat()
1481
1493
        format.features = {b"foo": b"required"}
1482
1494
        self.assertEqual(format.as_string(),
1483
 
            b"First line\n"
1484
 
            b"required foo\n")
 
1495
                         b"First line\n"
 
1496
                         b"required foo\n")
1485
1497
        format.features[b"another"] = b"optional"
1486
1498
        self.assertEqual(format.as_string(),
1487
 
            b"First line\n"
1488
 
            b"optional another\n"
1489
 
            b"required foo\n")
 
1499
                         b"First line\n"
 
1500
                         b"optional another\n"
 
1501
                         b"required foo\n")
1490
1502
 
1491
1503
    def test_network_name(self):
1492
1504
        # The network string should include the feature info
1511
1523
    def test_from_string_format_string_mismatch(self):
1512
1524
        # The first line has to match the format string
1513
1525
        self.assertRaises(AssertionError, SampleBzrFormat.from_string,
1514
 
            b"Second line\nrequired foo\n")
 
1526
                          b"Second line\nrequired foo\n")
1515
1527
 
1516
1528
    def test_from_string_missing_space(self):
1517
1529
        # At least one space is required in the feature lines
1518
1530
        self.assertRaises(errors.ParseFormatError, SampleBzrFormat.from_string,
1519
 
            b"First line\nfoo\n")
 
1531
                          b"First line\nfoo\n")
1520
1532
 
1521
1533
    def test_from_string_with_spaces(self):
1522
1534
        # Feature with spaces (in case we add stuff like this in the future)
1548
1560
        format = SampleBzrFormat()
1549
1561
        format.features = {b"nested-trees": b"required"}
1550
1562
        self.assertRaises(bzrdir.MissingFeature, format.check_support_status,
1551
 
            True)
 
1563
                          True)
1552
1564
        self.addCleanup(SampleBzrFormat.unregister_feature, b"nested-trees")
1553
1565
        SampleBzrFormat.register_feature(b"nested-trees")
1554
1566
        format.check_support_status(True)
1558
1570
        format = SampleBzrFormat()
1559
1571
        format.features = {b"nested-trees": b"unknown"}
1560
1572
        self.assertRaises(bzrdir.MissingFeature, format.check_support_status,
1561
 
            True)
 
1573
                          True)
1562
1574
        self.addCleanup(SampleBzrFormat.unregister_feature, b"nested-trees")
1563
1575
        SampleBzrFormat.register_feature(b"nested-trees")
1564
1576
        format.check_support_status(True)
1568
1580
        self.addCleanup(SampleBzrFormat.unregister_feature, b"nested-trees")
1569
1581
        SampleBzrFormat.register_feature(b"nested-trees")
1570
1582
        self.assertRaises(bzrdir.FeatureAlreadyRegistered,
1571
 
            SampleBzrFormat.register_feature, b"nested-trees")
 
1583
                          SampleBzrFormat.register_feature, b"nested-trees")
1572
1584
 
1573
1585
    def test_feature_with_space(self):
1574
1586
        # spaces are not allowed in feature names
1575
1587
        self.assertRaises(ValueError, SampleBzrFormat.register_feature,
1576
 
            b"nested trees")
 
1588
                          b"nested trees")