/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

  • Committer: Carl Friedrich Bolz
  • Date: 2006-09-06 21:17:22 UTC
  • mfrom: (1977 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2026.
  • Revision ID: cfbolz@gmx.de-20060906211722-b04f9c3ad1f53ef1
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
                           NotBranchError,
34
34
                           )
35
35
import bzrlib.repository as repository
 
36
import bzrlib.revision
36
37
from bzrlib.tests import (
37
38
                          ChrootedTestCase,
38
39
                          TestCase,
104
105
                                         target.get(path).read(),
105
106
                                         "text for file %r differs:\n" % path)
106
107
 
 
108
    def skipIfNoWorkingTree(self, a_bzrdir):
 
109
        """Raises TestSkipped if a_bzrdir doesn't have a working tree.
 
110
        
 
111
        If the bzrdir does have a workingtree, this is a no-op.
 
112
        """
 
113
        try:
 
114
            a_bzrdir.open_workingtree()
 
115
        except (errors.NotLocalUrl, errors.NoWorkingTree):
 
116
            raise TestSkipped("bzrdir on transport %r has no working tree"
 
117
                              % a_bzrdir.transport)
 
118
 
 
119
    def createWorkingTreeOrSkip(self, a_bzrdir):
 
120
        """Create a working tree on a_bzrdir, or raise TestSkipped.
 
121
        
 
122
        A simple wrapper for create_workingtree that translates NotLocalUrl into
 
123
        TestSkipped.  Returns the newly created working tree.
 
124
        """
 
125
        try:
 
126
            return a_bzrdir.create_workingtree()
 
127
        except errors.NotLocalUrl:
 
128
            raise TestSkipped("cannot make working tree with transport %r"
 
129
                              % a_bzrdir.transport)
 
130
 
 
131
    def sproutOrSkip(self, from_bzrdir, to_url, revision_id=None, basis=None,
 
132
                     force_new_repo=False):
 
133
        """Sprout from_bzrdir into to_url, or raise TestSkipped.
 
134
        
 
135
        A simple wrapper for from_bzrdir.sprout that translates NotLocalUrl into
 
136
        TestSkipped.  Returns the newly sprouted bzrdir.
 
137
        """
 
138
        try:
 
139
            target = from_bzrdir.sprout(to_url, revision_id=revision_id,
 
140
                                        basis=basis,
 
141
                                        force_new_repo=force_new_repo)
 
142
        except errors.NotLocalUrl:
 
143
            raise TestSkipped('Cannot sprout to remote bzrdirs.')
 
144
        return target
 
145
 
 
146
    def test_create_null_workingtree(self):
 
147
        dir = self.make_bzrdir('dir1')
 
148
        dir.create_repository()
 
149
        dir.create_branch()
 
150
        wt = dir.create_workingtree(revision_id=bzrlib.revision.NULL_REVISION)
 
151
        self.assertIs(wt.last_revision(), None)
 
152
 
107
153
    def test_clone_bzrdir_empty(self):
108
154
        dir = self.make_bzrdir('source')
109
155
        target = dir.clone(self.get_url('target'))
161
207
        tree.add('foo')
162
208
        tree.commit('revision 1', rev_id='1')
163
209
        tree.bzrdir.open_branch().set_revision_history([])
164
 
        tree.set_last_revision(None)
 
210
        tree.set_parent_trees([])
165
211
        tree.commit('revision 2', rev_id='2')
166
212
        tree.bzrdir.open_repository().copy_content_into(shared_repo)
167
213
        dir = self.make_bzrdir('shared/source')
181
227
        tree.add('foo')
182
228
        tree.commit('revision 1', rev_id='1')
183
229
        tree.bzrdir.open_branch().set_revision_history([])
184
 
        tree.set_last_revision(None)
 
230
        tree.set_parent_trees([])
185
231
        tree.commit('revision 2', rev_id='2')
186
232
        tree.bzrdir.open_repository().copy_content_into(shared_repo)
187
233
        shared_repo.set_make_working_trees(False)
226
272
        tree.add('foo')
227
273
        tree.commit('revision 1', rev_id='1')
228
274
        tree.bzrdir.open_branch().set_revision_history([])
229
 
        tree.set_last_revision(None)
 
275
        tree.set_parent_trees([])
230
276
        tree.commit('revision 2', rev_id='2')
231
277
        source = self.make_repository('source')
232
278
        tree.bzrdir.open_repository().copy_content_into(source)
332
378
        tree.commit('revision 1')
333
379
        dir = tree.bzrdir
334
380
        target = dir.clone(self.get_url('target'))
 
381
        self.skipIfNoWorkingTree(target)
335
382
        self.assertNotEqual(dir.transport.base, target.transport.base)
336
383
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
337
384
                                    ['./.bzr/stat-cache',
348
395
        tree.commit('revision 1')
349
396
        dir = tree.bzrdir
350
397
        target = dir.clone(self.get_url('target'))
 
398
        self.skipIfNoWorkingTree(target)
351
399
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
352
400
                                    ['./.bzr/stat-cache',
353
401
                                     './.bzr/checkout/stat-cache',
373
421
        except errors.IncompatibleFormat:
374
422
            # this is ok too, not all formats have to support references.
375
423
            return
376
 
        dir.create_workingtree()
 
424
        self.createWorkingTreeOrSkip(dir)
377
425
        target = dir.clone(self.get_url('target'))
 
426
        self.skipIfNoWorkingTree(target)
378
427
        self.assertNotEqual(dir.transport.base, target.transport.base)
379
428
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
380
429
                                    ['./.bzr/stat-cache',
382
431
                                     './.bzr/repository/inventory.knit',
383
432
                                     ])
384
433
 
385
 
 
386
434
    def test_clone_bzrdir_tree_revision(self):
387
435
        # test for revision limiting, [smoke test, not corner case checks].
388
436
        # make a tree with a revision with a last-revision
396
444
        tree.commit('revision 2', rev_id='2', allow_pointless=True)
397
445
        dir = tree.bzrdir
398
446
        target = dir.clone(self.get_url('target'), revision_id='1')
 
447
        self.skipIfNoWorkingTree(target)
399
448
        self.assertEqual('1', target.open_workingtree().last_revision())
400
449
 
401
450
    def test_clone_bzrdir_incomplete_source_with_basis(self):
414
463
        dir = source.bzrdir
415
464
        target = dir.clone(self.get_url('target'), basis=tree.bzrdir)
416
465
        self.assertEqual('2', target.open_branch().last_revision())
417
 
        self.assertEqual('2', target.open_workingtree().last_revision())
 
466
        try:
 
467
            self.assertEqual('2', target.open_workingtree().last_revision())
 
468
        except errors.NoWorkingTree:
 
469
            # It should have a working tree if it's able to have one, so if
 
470
            # we're here make sure it really can't have one.
 
471
            self.assertRaises(errors.NotLocalUrl, target.create_workingtree)
418
472
        self.assertTrue(target.open_branch().repository.has_revision('2'))
419
473
 
420
474
    def test_sprout_bzrdir_empty(self):
421
475
        dir = self.make_bzrdir('source')
422
 
        target = dir.sprout(self.get_url('target'))
 
476
        target = self.sproutOrSkip(dir, self.get_url('target'))
423
477
        self.assertNotEqual(dir.transport.base, target.transport.base)
424
478
        # creates a new repository branch and tree
425
479
        target.open_repository()
433
487
            self.make_repository('target', shared=True)
434
488
        except errors.IncompatibleFormat:
435
489
            return
436
 
        target = dir.sprout(self.get_url('target/child'))
 
490
        target = self.sproutOrSkip(dir, self.get_url('target/child'))
437
491
        self.assertRaises(errors.NoRepositoryPresent, target.open_repository)
438
492
        target.open_branch()
439
493
        target.open_workingtree()
440
494
 
441
 
    def test_sprout_bzrdir_empty_under_shared_repo(self):
 
495
    def test_sprout_bzrdir_empty_under_shared_repo_force_new(self):
442
496
        # the force_new_repo parameter should force use of a new repo in an empty
443
497
        # bzrdir's sprout logic
444
498
        dir = self.make_bzrdir('source')
446
500
            self.make_repository('target', shared=True)
447
501
        except errors.IncompatibleFormat:
448
502
            return
449
 
        target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
 
503
        target = self.sproutOrSkip(dir, self.get_url('target/child'),
 
504
                                   force_new_repo=True)
450
505
        target.open_repository()
451
506
        target.open_branch()
452
507
        target.open_workingtree()
460
515
        repo = dir.create_repository()
461
516
        repo.fetch(tree.branch.repository)
462
517
        self.assertTrue(repo.has_revision('1'))
463
 
        target = dir.sprout(self.get_url('target'))
 
518
        target = self.sproutOrSkip(dir, self.get_url('target'))
464
519
        self.assertNotEqual(dir.transport.base, target.transport.base)
465
520
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
466
521
                                    ['./.bzr/repository/inventory.knit',
472
527
        tree.add('foo')
473
528
        tree.commit('revision 1', rev_id='1')
474
529
        tree.bzrdir.open_branch().set_revision_history([])
475
 
        tree.set_last_revision(None)
 
530
        tree.set_parent_trees([])
476
531
        tree.commit('revision 2', rev_id='2')
477
532
        source = self.make_repository('source')
478
533
        tree.bzrdir.open_repository().copy_content_into(source)
481
536
            shared_repo = self.make_repository('target', shared=True)
482
537
        except errors.IncompatibleFormat:
483
538
            return
484
 
        target = dir.sprout(self.get_url('target/child'))
 
539
        target = self.sproutOrSkip(dir, self.get_url('target/child'))
485
540
        self.assertNotEqual(dir.transport.base, target.transport.base)
486
541
        self.assertTrue(shared_repo.has_revision('1'))
487
542
 
495
550
        tree.add('foo')
496
551
        tree.commit('revision 1', rev_id='1')
497
552
        tree.bzrdir.open_branch().set_revision_history([])
498
 
        tree.set_last_revision(None)
 
553
        tree.set_parent_trees([])
499
554
        tree.commit('revision 2', rev_id='2')
500
555
        tree.bzrdir.open_repository().copy_content_into(shared_repo)
501
556
        dir = self.make_bzrdir('shared/source')
502
557
        dir.create_branch()
503
 
        target = dir.sprout(self.get_url('shared/target'))
 
558
        target = self.sproutOrSkip(dir, self.get_url('shared/target'))
504
559
        self.assertNotEqual(dir.transport.base, target.transport.base)
505
560
        self.assertNotEqual(dir.transport.base, shared_repo.bzrdir.transport.base)
506
561
        self.assertTrue(shared_repo.has_revision('1'))
515
570
        tree.add('foo')
516
571
        tree.commit('revision 1', rev_id='1')
517
572
        tree.bzrdir.open_branch().set_revision_history([])
518
 
        tree.set_last_revision(None)
 
573
        tree.set_parent_trees([])
519
574
        tree.commit('revision 2', rev_id='2')
520
575
        tree.bzrdir.open_repository().copy_content_into(shared_repo)
521
576
        shared_repo.set_make_working_trees(False)
523
578
        self.assertTrue(shared_repo.has_revision('1'))
524
579
        dir = self.make_bzrdir('shared/source')
525
580
        dir.create_branch()
526
 
        target = dir.sprout(self.get_url('target'))
 
581
        target = self.sproutOrSkip(dir, self.get_url('target'))
527
582
        self.assertNotEqual(dir.transport.base, target.transport.base)
528
583
        self.assertNotEqual(dir.transport.base, shared_repo.bzrdir.transport.base)
529
584
        branch = target.open_branch()
537
592
        tree.add('foo')
538
593
        tree.commit('revision 1', rev_id='1')
539
594
        tree.bzrdir.open_branch().set_revision_history([])
540
 
        tree.set_last_revision(None)
 
595
        tree.set_parent_trees([])
541
596
        tree.commit('revision 2', rev_id='2')
542
597
        source = self.make_repository('source')
543
598
        tree.bzrdir.open_repository().copy_content_into(source)
546
601
            shared_repo = self.make_repository('target', shared=True)
547
602
        except errors.IncompatibleFormat:
548
603
            return
549
 
        target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
 
604
        target = self.sproutOrSkip(dir, self.get_url('target/child'),
 
605
                                   force_new_repo=True)
550
606
        self.assertNotEqual(dir.transport.base, target.transport.base)
551
607
        self.assertFalse(shared_repo.has_revision('1'))
552
608
 
560
616
        tree.add('foo')
561
617
        tree.commit('revision 1', rev_id='1')
562
618
        tree.bzrdir.open_branch().set_revision_history([])
563
 
        tree.set_last_revision(None)
 
619
        tree.set_parent_trees([])
564
620
        tree.commit('revision 2', rev_id='2')
565
621
        source = self.make_repository('source')
566
622
        tree.bzrdir.open_repository().copy_content_into(source)
567
623
        dir = source.bzrdir
568
 
        target = dir.sprout(self.get_url('target'), revision_id='2')
 
624
        target = self.sproutOrSkip(dir, self.get_url('target'), revision_id='2')
569
625
        raise TestSkipped('revision limiting not strict yet')
570
626
 
571
627
    def test_sprout_bzrdir_branch_and_repo(self):
577
633
        tree.bzrdir.open_repository().copy_content_into(source.repository)
578
634
        tree.bzrdir.open_branch().copy_content_into(source)
579
635
        dir = source.bzrdir
580
 
        target = dir.sprout(self.get_url('target'))
 
636
        target = self.sproutOrSkip(dir, self.get_url('target'))
581
637
        self.assertNotEqual(dir.transport.base, target.transport.base)
582
638
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
583
639
                                    ['./.bzr/stat-cache',
602
658
            shared_repo = self.make_repository('target', shared=True)
603
659
        except errors.IncompatibleFormat:
604
660
            return
605
 
        target = dir.sprout(self.get_url('target/child'))
 
661
        target = self.sproutOrSkip(dir, self.get_url('target/child'))
606
662
        self.assertTrue(shared_repo.has_revision('1'))
607
663
 
608
664
    def test_sprout_bzrdir_branch_and_repo_shared_force_new_repo(self):
620
676
            shared_repo = self.make_repository('target', shared=True)
621
677
        except errors.IncompatibleFormat:
622
678
            return
623
 
        target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
 
679
        target = self.sproutOrSkip(dir, self.get_url('target/child'),
 
680
                                   force_new_repo=True)
624
681
        self.assertNotEqual(dir.transport.base, target.transport.base)
625
682
        self.assertFalse(shared_repo.has_revision('1'))
626
683
 
635
692
            # this is ok too, not all formats have to support references.
636
693
            return
637
694
        self.assertRaises(errors.NoRepositoryPresent, dir.open_repository)
638
 
        target = dir.sprout(self.get_url('target'))
 
695
        target = self.sproutOrSkip(dir, self.get_url('target'))
639
696
        self.assertNotEqual(dir.transport.base, target.transport.base)
640
697
        # we want target to have a branch that is in-place.
641
698
        self.assertEqual(target, target.open_branch().bzrdir)
659
716
            shared_repo = self.make_repository('target', shared=True)
660
717
        except errors.IncompatibleFormat:
661
718
            return
662
 
        target = dir.sprout(self.get_url('target/child'))
 
719
        target = self.sproutOrSkip(dir, self.get_url('target/child'))
663
720
        self.assertNotEqual(dir.transport.base, target.transport.base)
664
721
        # we want target to have a branch that is in-place.
665
722
        self.assertEqual(target, target.open_branch().bzrdir)
685
742
            shared_repo = self.make_repository('target', shared=True)
686
743
        except errors.IncompatibleFormat:
687
744
            return
688
 
        target = dir.sprout(self.get_url('target/child'), force_new_repo=True)
 
745
        target = self.sproutOrSkip(dir, self.get_url('target/child'),
 
746
                                   force_new_repo=True)
689
747
        self.assertNotEqual(dir.transport.base, target.transport.base)
690
748
        # we want target to have a branch that is in-place.
691
749
        self.assertEqual(target, target.open_branch().bzrdir)
708
766
        tree.bzrdir.open_repository().copy_content_into(source.repository)
709
767
        tree.bzrdir.open_branch().copy_content_into(source)
710
768
        dir = source.bzrdir
711
 
        target = dir.sprout(self.get_url('target'), revision_id='1')
 
769
        target = self.sproutOrSkip(dir, self.get_url('target'), revision_id='1')
712
770
        self.assertEqual('1', target.open_branch().last_revision())
713
771
        
714
772
    def test_sprout_bzrdir_tree_branch_repo(self):
717
775
        tree.add('foo')
718
776
        tree.commit('revision 1')
719
777
        dir = tree.bzrdir
720
 
        target = dir.sprout(self.get_url('target'))
 
778
        target = self.sproutOrSkip(dir, self.get_url('target'))
721
779
        self.assertNotEqual(dir.transport.base, target.transport.base)
722
780
        self.assertDirectoriesEqual(dir.root_transport, target.root_transport,
723
781
                                    ['./.bzr/stat-cache',
739
797
            # this is ok too, not all formats have to support references.
740
798
            return
741
799
        self.assertRaises(errors.NoRepositoryPresent, dir.open_repository)
742
 
        tree = dir.create_workingtree()
 
800
        tree = self.createWorkingTreeOrSkip(dir)
743
801
        tree.bzrdir.root_transport.mkdir('subdir')
744
802
        tree.add('subdir')
745
 
        target = dir.sprout(self.get_url('target'))
 
803
        target = self.sproutOrSkip(dir, self.get_url('target'))
746
804
        self.assertNotEqual(dir.transport.base, target.transport.base)
747
805
        # we want target to have a branch that is in-place.
748
806
        self.assertEqual(target, target.open_branch().bzrdir)
765
823
            # this is ok too, not all formats have to support references.
766
824
            return
767
825
        self.assertRaises(errors.NoRepositoryPresent, dir.open_repository)
768
 
        tree = dir.create_workingtree()
 
826
        tree = self.createWorkingTreeOrSkip(dir)
769
827
        self.build_tree(['foo'], transport=dir.root_transport)
770
828
        tree.add('foo')
771
829
        tree.commit('revision 1', rev_id='1')
772
830
        tree.commit('revision 2', rev_id='2', allow_pointless=True)
773
831
        target = dir.sprout(self.get_url('target'), revision_id='1')
 
832
        self.skipIfNoWorkingTree(target)
774
833
        self.assertNotEqual(dir.transport.base, target.transport.base)
775
834
        # we want target to have a branch that is in-place.
776
835
        self.assertEqual(target, target.open_branch().bzrdir)
793
852
        tree.commit('revision 1', rev_id='1')
794
853
        tree.commit('revision 2', rev_id='2', allow_pointless=True)
795
854
        dir = tree.bzrdir
796
 
        target = dir.sprout(self.get_url('target'), revision_id='1')
 
855
        target = self.sproutOrSkip(dir, self.get_url('target'), revision_id='1')
797
856
        self.assertEqual('1', target.open_workingtree().last_revision())
798
857
 
799
858
    def test_sprout_bzrdir_incomplete_source_with_basis(self):
810
869
        tree.copy_content_into(source)
811
870
        self.assertFalse(source.branch.repository.has_revision('2'))
812
871
        dir = source.bzrdir
813
 
        target = dir.sprout(self.get_url('target'), basis=tree.bzrdir)
 
872
        target = self.sproutOrSkip(dir, self.get_url('target'),
 
873
                                   basis=tree.bzrdir)
814
874
        self.assertEqual('2', target.open_branch().last_revision())
815
875
        self.assertEqual('2', target.open_workingtree().last_revision())
816
876
        self.assertTrue(target.open_branch().repository.has_revision('2'))
936
996
            # because the default open will not open them and
937
997
            # they may not be initializable.
938
998
            return
939
 
        # this has to be tested with local access as we still support creating 
940
 
        # format 6 bzrdirs
941
 
        t = get_transport('.')
 
999
        t = self.get_transport()
942
1000
        made_control = self.bzrdir_format.initialize(t.base)
943
1001
        made_repo = made_control.create_repository()
944
1002
        made_branch = made_control.create_branch()
945
 
        made_tree = made_control.create_workingtree()
 
1003
        made_tree = self.createWorkingTreeOrSkip(made_control)
946
1004
        self.failUnless(isinstance(made_tree, workingtree.WorkingTree))
947
1005
        self.assertEqual(made_control, made_tree.bzrdir)
948
1006
        
949
1007
    def test_create_workingtree_revision(self):
950
1008
        # a bzrdir can construct a working tree for itself @ a specific revision.
 
1009
        t = self.get_transport()
951
1010
        source = self.make_branch_and_tree('source')
952
1011
        source.commit('a', rev_id='a', allow_pointless=True)
953
1012
        source.commit('b', rev_id='b', allow_pointless=True)
954
1013
        self.build_tree(['new/'])
955
 
        made_control = self.bzrdir_format.initialize('new')
 
1014
        t_new = t.clone('new')
 
1015
        made_control = self.bzrdir_format.initialize_on_transport(t_new)
956
1016
        source.branch.repository.clone(made_control)
957
1017
        source.branch.clone(made_control)
958
 
        made_tree = made_control.create_workingtree(revision_id='a')
 
1018
        try:
 
1019
            made_tree = made_control.create_workingtree(revision_id='a')
 
1020
        except errors.NotLocalUrl:
 
1021
            raise TestSkipped("Can't make working tree on transport %r" % t)
959
1022
        self.assertEqual('a', made_tree.last_revision())
960
1023
        
961
1024
    def test_open_workingtree(self):
994
1057
        except errors.IncompatibleFormat:
995
1058
            found_transport = dir.get_branch_transport(identifiable_format)
996
1059
        self.assertTrue(isinstance(found_transport, transport.Transport))
997
 
        # and the dir which has been initialized for us must be statable.
998
 
        found_transport.stat('.')
 
1060
        # and the dir which has been initialized for us must exist.
 
1061
        found_transport.list_dir('.')
999
1062
 
1000
1063
    def test_get_repository_transport(self):
1001
1064
        dir = self.make_bzrdir('.')
1015
1078
        except errors.IncompatibleFormat:
1016
1079
            found_transport = dir.get_repository_transport(identifiable_format)
1017
1080
        self.assertTrue(isinstance(found_transport, transport.Transport))
1018
 
        # and the dir which has been initialized for us must be statable.
1019
 
        found_transport.stat('.')
 
1081
        # and the dir which has been initialized for us must exist.
 
1082
        found_transport.list_dir('.')
1020
1083
 
1021
1084
    def test_get_workingtree_transport(self):
1022
1085
        dir = self.make_bzrdir('.')
1036
1099
        except errors.IncompatibleFormat:
1037
1100
            found_transport = dir.get_workingtree_transport(identifiable_format)
1038
1101
        self.assertTrue(isinstance(found_transport, transport.Transport))
1039
 
        # and the dir which has been initialized for us must be statable.
1040
 
        found_transport.stat('.')
 
1102
        # and the dir which has been initialized for us must exist.
 
1103
        found_transport.list_dir('.')
1041
1104
 
1042
1105
    def test_root_transport(self):
1043
1106
        dir = self.make_bzrdir('.')
1171
1234
        dir.needs_format_conversion(None)
1172
1235
 
1173
1236
    def test_upgrade_new_instance(self):
1174
 
        """Does an available updater work ?."""
 
1237
        """Does an available updater work?"""
1175
1238
        dir = self.make_bzrdir('.')
1176
 
        # for now, check is not ready for partial bzrdirs.
 
1239
        # for now, upgrade is not ready for partial bzrdirs.
1177
1240
        dir.create_repository()
1178
1241
        dir.create_branch()
1179
 
        dir.create_workingtree()
 
1242
        self.createWorkingTreeOrSkip(dir)
1180
1243
        if dir.can_convert_format():
1181
1244
            # if its default updatable there must be an updater 
1182
1245
            # (we change the default to match the lastest known format