/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 bzrlib/tests/bzrdir_implementations/test_bzrdir.py

Merge updated set_parents api.

Show diffs side-by-side

added added

removed removed

Lines of Context:
104
104
                                         target.get(path).read(),
105
105
                                         "text for file %r differs:\n" % path)
106
106
 
 
107
    def skipIfNoWorkingTree(self, a_bzrdir):
 
108
        """Raises TestSkipped if a_bzrdir doesn't have a working tree.
 
109
        
 
110
        If the bzrdir does have a workingtree, this is a no-op.
 
111
        """
 
112
        try:
 
113
            a_bzrdir.open_workingtree()
 
114
        except (errors.NotLocalUrl, errors.NoWorkingTree):
 
115
            raise TestSkipped("bzrdir on transport %r has no working tree"
 
116
                              % a_bzrdir.transport)
 
117
 
 
118
    def createWorkingTreeOrSkip(self, a_bzrdir):
 
119
        """Create a working tree on a_bzrdir, or raise TestSkipped.
 
120
        
 
121
        A simple wrapper for create_workingtree that translates NotLocalUrl into
 
122
        TestSkipped.  Returns the newly created working tree.
 
123
        """
 
124
        try:
 
125
            return a_bzrdir.create_workingtree()
 
126
        except errors.NotLocalUrl:
 
127
            raise TestSkipped("cannot make working tree with transport %r"
 
128
                              % a_bzrdir.transport)
 
129
 
 
130
    def sproutOrSkip(self, from_bzrdir, to_url, revision_id=None, basis=None,
 
131
                     force_new_repo=False):
 
132
        """Sprout from_bzrdir into to_url, or raise TestSkipped.
 
133
        
 
134
        A simple wrapper for from_bzrdir.sprout that translates NotLocalUrl into
 
135
        TestSkipped.  Returns the newly sprouted bzrdir.
 
136
        """
 
137
        try:
 
138
            target = from_bzrdir.sprout(to_url, revision_id=revision_id,
 
139
                                        basis=basis,
 
140
                                        force_new_repo=force_new_repo)
 
141
        except errors.NotLocalUrl:
 
142
            raise TestSkipped('Cannot sprout to remote bzrdirs.')
 
143
        return target
 
144
 
107
145
    def test_clone_bzrdir_empty(self):
108
146
        dir = self.make_bzrdir('source')
109
147
        target = dir.clone(self.get_url('target'))
332
370
        tree.commit('revision 1')
333
371
        dir = tree.bzrdir
334
372
        target = dir.clone(self.get_url('target'))
 
373
        self.skipIfNoWorkingTree(target)
335
374
        self.assertNotEqual(dir.transport.base, target.transport.base)
336
375
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
337
376
                                    ['./.bzr/stat-cache',
348
387
        tree.commit('revision 1')
349
388
        dir = tree.bzrdir
350
389
        target = dir.clone(self.get_url('target'))
 
390
        self.skipIfNoWorkingTree(target)
351
391
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
352
392
                                    ['./.bzr/stat-cache',
353
393
                                     './.bzr/checkout/stat-cache',
373
413
        except errors.IncompatibleFormat:
374
414
            # this is ok too, not all formats have to support references.
375
415
            return
376
 
        dir.create_workingtree()
 
416
        self.createWorkingTreeOrSkip(dir)
377
417
        target = dir.clone(self.get_url('target'))
 
418
        self.skipIfNoWorkingTree(target)
378
419
        self.assertNotEqual(dir.transport.base, target.transport.base)
379
420
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
380
421
                                    ['./.bzr/stat-cache',
382
423
                                     './.bzr/repository/inventory.knit',
383
424
                                     ])
384
425
 
385
 
 
386
426
    def test_clone_bzrdir_tree_revision(self):
387
427
        # test for revision limiting, [smoke test, not corner case checks].
388
428
        # make a tree with a revision with a last-revision
396
436
        tree.commit('revision 2', rev_id='2', allow_pointless=True)
397
437
        dir = tree.bzrdir
398
438
        target = dir.clone(self.get_url('target'), revision_id='1')
 
439
        self.skipIfNoWorkingTree(target)
399
440
        self.assertEqual('1', target.open_workingtree().last_revision())
400
441
 
401
442
    def test_clone_bzrdir_incomplete_source_with_basis(self):
414
455
        dir = source.bzrdir
415
456
        target = dir.clone(self.get_url('target'), basis=tree.bzrdir)
416
457
        self.assertEqual('2', target.open_branch().last_revision())
417
 
        self.assertEqual('2', target.open_workingtree().last_revision())
 
458
        try:
 
459
            self.assertEqual('2', target.open_workingtree().last_revision())
 
460
        except errors.NoWorkingTree:
 
461
            # It should have a working tree if it's able to have one, so if
 
462
            # we're here make sure it really can't have one.
 
463
            self.assertRaises(errors.NotLocalUrl, target.create_workingtree)
418
464
        self.assertTrue(target.open_branch().repository.has_revision('2'))
419
465
 
420
466
    def test_sprout_bzrdir_empty(self):
421
467
        dir = self.make_bzrdir('source')
422
 
        target = dir.sprout(self.get_url('target'))
 
468
        target = self.sproutOrSkip(dir, self.get_url('target'))
423
469
        self.assertNotEqual(dir.transport.base, target.transport.base)
424
470
        # creates a new repository branch and tree
425
471
        target.open_repository()
433
479
            self.make_repository('target', shared=True)
434
480
        except errors.IncompatibleFormat:
435
481
            return
436
 
        target = dir.sprout(self.get_url('target/child'))
 
482
        target = self.sproutOrSkip(dir, self.get_url('target/child'))
437
483
        self.assertRaises(errors.NoRepositoryPresent, target.open_repository)
438
484
        target.open_branch()
439
485
        target.open_workingtree()
440
486
 
441
 
    def test_sprout_bzrdir_empty_under_shared_repo(self):
 
487
    def test_sprout_bzrdir_empty_under_shared_repo_force_new(self):
442
488
        # the force_new_repo parameter should force use of a new repo in an empty
443
489
        # bzrdir's sprout logic
444
490
        dir = self.make_bzrdir('source')
446
492
            self.make_repository('target', shared=True)
447
493
        except errors.IncompatibleFormat:
448
494
            return
449
 
        target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
 
495
        target = self.sproutOrSkip(dir, self.get_url('target/child'),
 
496
                                   force_new_repo=True)
450
497
        target.open_repository()
451
498
        target.open_branch()
452
499
        target.open_workingtree()
460
507
        repo = dir.create_repository()
461
508
        repo.fetch(tree.branch.repository)
462
509
        self.assertTrue(repo.has_revision('1'))
463
 
        target = dir.sprout(self.get_url('target'))
 
510
        target = self.sproutOrSkip(dir, self.get_url('target'))
464
511
        self.assertNotEqual(dir.transport.base, target.transport.base)
465
512
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
466
513
                                    ['./.bzr/repository/inventory.knit',
481
528
            shared_repo = self.make_repository('target', shared=True)
482
529
        except errors.IncompatibleFormat:
483
530
            return
484
 
        target = dir.sprout(self.get_url('target/child'))
 
531
        target = self.sproutOrSkip(dir, self.get_url('target/child'))
485
532
        self.assertNotEqual(dir.transport.base, target.transport.base)
486
533
        self.assertTrue(shared_repo.has_revision('1'))
487
534
 
500
547
        tree.bzrdir.open_repository().copy_content_into(shared_repo)
501
548
        dir = self.make_bzrdir('shared/source')
502
549
        dir.create_branch()
503
 
        target = dir.sprout(self.get_url('shared/target'))
 
550
        target = self.sproutOrSkip(dir, self.get_url('shared/target'))
504
551
        self.assertNotEqual(dir.transport.base, target.transport.base)
505
552
        self.assertNotEqual(dir.transport.base, shared_repo.bzrdir.transport.base)
506
553
        self.assertTrue(shared_repo.has_revision('1'))
523
570
        self.assertTrue(shared_repo.has_revision('1'))
524
571
        dir = self.make_bzrdir('shared/source')
525
572
        dir.create_branch()
526
 
        target = dir.sprout(self.get_url('target'))
 
573
        target = self.sproutOrSkip(dir, self.get_url('target'))
527
574
        self.assertNotEqual(dir.transport.base, target.transport.base)
528
575
        self.assertNotEqual(dir.transport.base, shared_repo.bzrdir.transport.base)
529
576
        branch = target.open_branch()
546
593
            shared_repo = self.make_repository('target', shared=True)
547
594
        except errors.IncompatibleFormat:
548
595
            return
549
 
        target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
 
596
        target = self.sproutOrSkip(dir, self.get_url('target/child'),
 
597
                                   force_new_repo=True)
550
598
        self.assertNotEqual(dir.transport.base, target.transport.base)
551
599
        self.assertFalse(shared_repo.has_revision('1'))
552
600
 
565
613
        source = self.make_repository('source')
566
614
        tree.bzrdir.open_repository().copy_content_into(source)
567
615
        dir = source.bzrdir
568
 
        target = dir.sprout(self.get_url('target'), revision_id='2')
 
616
        target = self.sproutOrSkip(dir, self.get_url('target'), revision_id='2')
569
617
        raise TestSkipped('revision limiting not strict yet')
570
618
 
571
619
    def test_sprout_bzrdir_branch_and_repo(self):
577
625
        tree.bzrdir.open_repository().copy_content_into(source.repository)
578
626
        tree.bzrdir.open_branch().copy_content_into(source)
579
627
        dir = source.bzrdir
580
 
        target = dir.sprout(self.get_url('target'))
 
628
        target = self.sproutOrSkip(dir, self.get_url('target'))
581
629
        self.assertNotEqual(dir.transport.base, target.transport.base)
582
630
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
583
631
                                    ['./.bzr/stat-cache',
602
650
            shared_repo = self.make_repository('target', shared=True)
603
651
        except errors.IncompatibleFormat:
604
652
            return
605
 
        target = dir.sprout(self.get_url('target/child'))
 
653
        target = self.sproutOrSkip(dir, self.get_url('target/child'))
606
654
        self.assertTrue(shared_repo.has_revision('1'))
607
655
 
608
656
    def test_sprout_bzrdir_branch_and_repo_shared_force_new_repo(self):
620
668
            shared_repo = self.make_repository('target', shared=True)
621
669
        except errors.IncompatibleFormat:
622
670
            return
623
 
        target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
 
671
        target = self.sproutOrSkip(dir, self.get_url('target/child'),
 
672
                                   force_new_repo=True)
624
673
        self.assertNotEqual(dir.transport.base, target.transport.base)
625
674
        self.assertFalse(shared_repo.has_revision('1'))
626
675
 
635
684
            # this is ok too, not all formats have to support references.
636
685
            return
637
686
        self.assertRaises(errors.NoRepositoryPresent, dir.open_repository)
638
 
        target = dir.sprout(self.get_url('target'))
 
687
        target = self.sproutOrSkip(dir, self.get_url('target'))
639
688
        self.assertNotEqual(dir.transport.base, target.transport.base)
640
689
        # we want target to have a branch that is in-place.
641
690
        self.assertEqual(target, target.open_branch().bzrdir)
659
708
            shared_repo = self.make_repository('target', shared=True)
660
709
        except errors.IncompatibleFormat:
661
710
            return
662
 
        target = dir.sprout(self.get_url('target/child'))
 
711
        target = self.sproutOrSkip(dir, self.get_url('target/child'))
663
712
        self.assertNotEqual(dir.transport.base, target.transport.base)
664
713
        # we want target to have a branch that is in-place.
665
714
        self.assertEqual(target, target.open_branch().bzrdir)
685
734
            shared_repo = self.make_repository('target', shared=True)
686
735
        except errors.IncompatibleFormat:
687
736
            return
688
 
        target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
 
737
        target = self.sproutOrSkip(dir, self.get_url('target/child'),
 
738
                                   force_new_repo=True)
689
739
        self.assertNotEqual(dir.transport.base, target.transport.base)
690
740
        # we want target to have a branch that is in-place.
691
741
        self.assertEqual(target, target.open_branch().bzrdir)
708
758
        tree.bzrdir.open_repository().copy_content_into(source.repository)
709
759
        tree.bzrdir.open_branch().copy_content_into(source)
710
760
        dir = source.bzrdir
711
 
        target = dir.sprout(self.get_url('target'), revision_id='1')
 
761
        target = self.sproutOrSkip(dir, self.get_url('target'), revision_id='1')
712
762
        self.assertEqual('1', target.open_branch().last_revision())
713
763
        
714
764
    def test_sprout_bzrdir_tree_branch_repo(self):
717
767
        tree.add('foo')
718
768
        tree.commit('revision 1')
719
769
        dir = tree.bzrdir
720
 
        target = dir.sprout(self.get_url('target'))
 
770
        target = self.sproutOrSkip(dir, self.get_url('target'))
721
771
        self.assertNotEqual(dir.transport.base, target.transport.base)
722
772
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
723
773
                                    ['./.bzr/stat-cache',
739
789
            # this is ok too, not all formats have to support references.
740
790
            return
741
791
        self.assertRaises(errors.NoRepositoryPresent, dir.open_repository)
742
 
        tree = dir.create_workingtree()
 
792
        tree = self.createWorkingTreeOrSkip(dir)
743
793
        tree.bzrdir.root_transport.mkdir('subdir')
744
794
        tree.add('subdir')
745
 
        target = dir.sprout(self.get_url('target'))
 
795
        target = self.sproutOrSkip(dir, self.get_url('target'))
746
796
        self.assertNotEqual(dir.transport.base, target.transport.base)
747
797
        # we want target to have a branch that is in-place.
748
798
        self.assertEqual(target, target.open_branch().bzrdir)
765
815
            # this is ok too, not all formats have to support references.
766
816
            return
767
817
        self.assertRaises(errors.NoRepositoryPresent, dir.open_repository)
768
 
        tree = dir.create_workingtree()
 
818
        tree = self.createWorkingTreeOrSkip(dir)
769
819
        self.build_tree(['foo'], transport=dir.root_transport)
770
820
        tree.add('foo')
771
821
        tree.commit('revision 1', rev_id='1')
772
822
        tree.commit('revision 2', rev_id='2', allow_pointless=True)
773
823
        target = dir.sprout(self.get_url('target'), revision_id='1')
 
824
        self.skipIfNoWorkingTree(target)
774
825
        self.assertNotEqual(dir.transport.base, target.transport.base)
775
826
        # we want target to have a branch that is in-place.
776
827
        self.assertEqual(target, target.open_branch().bzrdir)
793
844
        tree.commit('revision 1', rev_id='1')
794
845
        tree.commit('revision 2', rev_id='2', allow_pointless=True)
795
846
        dir = tree.bzrdir
796
 
        target = dir.sprout(self.get_url('target'), revision_id='1')
 
847
        target = self.sproutOrSkip(dir, self.get_url('target'), revision_id='1')
797
848
        self.assertEqual('1', target.open_workingtree().last_revision())
798
849
 
799
850
    def test_sprout_bzrdir_incomplete_source_with_basis(self):
810
861
        tree.copy_content_into(source)
811
862
        self.assertFalse(source.branch.repository.has_revision('2'))
812
863
        dir = source.bzrdir
813
 
        target = dir.sprout(self.get_url('target'), basis=tree.bzrdir)
 
864
        target = self.sproutOrSkip(dir, self.get_url('target'),
 
865
                                   basis=tree.bzrdir)
814
866
        self.assertEqual('2', target.open_branch().last_revision())
815
867
        self.assertEqual('2', target.open_workingtree().last_revision())
816
868
        self.assertTrue(target.open_branch().repository.has_revision('2'))
936
988
            # because the default open will not open them and
937
989
            # they may not be initializable.
938
990
            return
939
 
        # this has to be tested with local access as we still support creating 
940
 
        # format 6 bzrdirs
941
 
        t = get_transport('.')
 
991
        t = self.get_transport()
942
992
        made_control = self.bzrdir_format.initialize(t.base)
943
993
        made_repo = made_control.create_repository()
944
994
        made_branch = made_control.create_branch()
945
 
        made_tree = made_control.create_workingtree()
 
995
        made_tree = self.createWorkingTreeOrSkip(made_control)
946
996
        self.failUnless(isinstance(made_tree, workingtree.WorkingTree))
947
997
        self.assertEqual(made_control, made_tree.bzrdir)
948
998
        
949
999
    def test_create_workingtree_revision(self):
950
1000
        # a bzrdir can construct a working tree for itself @ a specific revision.
 
1001
        t = self.get_transport()
951
1002
        source = self.make_branch_and_tree('source')
952
1003
        source.commit('a', rev_id='a', allow_pointless=True)
953
1004
        source.commit('b', rev_id='b', allow_pointless=True)
954
1005
        self.build_tree(['new/'])
955
 
        made_control = self.bzrdir_format.initialize('new')
 
1006
        t_new = t.clone('new')
 
1007
        made_control = self.bzrdir_format.initialize_on_transport(t_new)
956
1008
        source.branch.repository.clone(made_control)
957
1009
        source.branch.clone(made_control)
958
 
        made_tree = made_control.create_workingtree(revision_id='a')
 
1010
        try:
 
1011
            made_tree = made_control.create_workingtree(revision_id='a')
 
1012
        except errors.NotLocalUrl:
 
1013
            raise TestSkipped("Can't make working tree on transport %r" % t)
959
1014
        self.assertEqual('a', made_tree.last_revision())
960
1015
        
961
1016
    def test_open_workingtree(self):
994
1049
        except errors.IncompatibleFormat:
995
1050
            found_transport = dir.get_branch_transport(identifiable_format)
996
1051
        self.assertTrue(isinstance(found_transport, transport.Transport))
997
 
        # and the dir which has been initialized for us must be statable.
998
 
        found_transport.stat('.')
 
1052
        # and the dir which has been initialized for us must exist.
 
1053
        found_transport.list_dir('.')
999
1054
 
1000
1055
    def test_get_repository_transport(self):
1001
1056
        dir = self.make_bzrdir('.')
1015
1070
        except errors.IncompatibleFormat:
1016
1071
            found_transport = dir.get_repository_transport(identifiable_format)
1017
1072
        self.assertTrue(isinstance(found_transport, transport.Transport))
1018
 
        # and the dir which has been initialized for us must be statable.
1019
 
        found_transport.stat('.')
 
1073
        # and the dir which has been initialized for us must exist.
 
1074
        found_transport.list_dir('.')
1020
1075
 
1021
1076
    def test_get_workingtree_transport(self):
1022
1077
        dir = self.make_bzrdir('.')
1036
1091
        except errors.IncompatibleFormat:
1037
1092
            found_transport = dir.get_workingtree_transport(identifiable_format)
1038
1093
        self.assertTrue(isinstance(found_transport, transport.Transport))
1039
 
        # and the dir which has been initialized for us must be statable.
1040
 
        found_transport.stat('.')
 
1094
        # and the dir which has been initialized for us must exist.
 
1095
        found_transport.list_dir('.')
1041
1096
 
1042
1097
    def test_root_transport(self):
1043
1098
        dir = self.make_bzrdir('.')
1171
1226
        dir.needs_format_conversion(None)
1172
1227
 
1173
1228
    def test_upgrade_new_instance(self):
1174
 
        """Does an available updater work ?."""
 
1229
        """Does an available updater work?"""
1175
1230
        dir = self.make_bzrdir('.')
1176
 
        # for now, check is not ready for partial bzrdirs.
 
1231
        # for now, upgrade is not ready for partial bzrdirs.
1177
1232
        dir.create_repository()
1178
1233
        dir.create_branch()
1179
 
        dir.create_workingtree()
 
1234
        self.createWorkingTreeOrSkip(dir)
1180
1235
        if dir.can_convert_format():
1181
1236
            # if its default updatable there must be an updater 
1182
1237
            # (we change the default to match the lastest known format