/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/per_repository/test_commit_builder.py

merge bzr.dev r4221

Show diffs side-by-side

added added

removed removed

Lines of Context:
76
76
        try:
77
77
            builder = tree.branch.get_commit_builder([])
78
78
            try:
79
 
                builder.record_iter_changes(tree, tree.last_revision(),
80
 
                    tree.iter_changes(tree.basis_tree()))
 
79
                list(builder.record_iter_changes(tree, tree.last_revision(),
 
80
                    tree.iter_changes(tree.basis_tree())))
81
81
                builder.finish_inventory()
82
82
            except:
83
83
                builder.abort()
107
107
                basis = tree.basis_tree()
108
108
                last_rev = tree.last_revision()
109
109
                changes = tree.iter_changes(basis)
110
 
                builder.record_iter_changes(tree, last_rev, changes)
 
110
                list(builder.record_iter_changes(tree, last_rev, changes))
111
111
                builder.finish_inventory()
112
112
            finally:
113
113
                builder.abort()
179
179
                return
180
180
            self.assertFalse(builder.random_revid)
181
181
            try:
182
 
                builder.record_iter_changes(tree, tree.last_revision(),
183
 
                    tree.iter_changes(tree.basis_tree()))
 
182
                list(builder.record_iter_changes(tree, tree.last_revision(),
 
183
                    tree.iter_changes(tree.basis_tree())))
184
184
                builder.finish_inventory()
185
185
            except:
186
186
                builder.abort()
255
255
        tree.lock_write()
256
256
        builder = tree.branch.get_commit_builder([old_revision_id])
257
257
        try:
258
 
            builder.record_iter_changes(tree, old_revision_id, [])
 
258
            list(builder.record_iter_changes(tree, old_revision_id, []))
259
259
            # Regardless of repository root behaviour we should consider this a
260
260
            # pointless commit.
261
261
            self.assertFalse(builder.any_changes())
393
393
                delete_change = ('foo-id', ('foo', None), True, (True, False),
394
394
                    (tree.path2id(''), None), ('foo', None), ('file', None),
395
395
                    (False, None))
396
 
                builder.record_iter_changes(tree, rev_id, [delete_change])
 
396
                list(builder.record_iter_changes(tree, rev_id,
 
397
                    [delete_change]))
397
398
                self.assertEqual(("foo", None, "foo-id", None),
398
399
                    builder._basis_delta[0])
399
400
                self.assertTrue(builder.any_changes())
448
449
        try:
449
450
            builder = tree.branch.get_commit_builder([])
450
451
            try:
451
 
                builder.record_iter_changes(tree, _mod_revision.NULL_REVISION,
452
 
                    tree.iter_changes(tree.basis_tree()))
 
452
                list(builder.record_iter_changes(tree,
 
453
                    _mod_revision.NULL_REVISION,
 
454
                    tree.iter_changes(tree.basis_tree())))
453
455
                builder.finish_inventory()
454
456
                rev_id = builder.commit('foo bar')
455
457
            except:
502
504
 
503
505
    def _add_commit_check_unchanged(self, tree, name, mini_commit=None):
504
506
        tree.add([name], [name + 'id'])
 
507
        self._commit_check_unchanged(tree, name, name + 'id',
 
508
            mini_commit=mini_commit)
 
509
 
 
510
    def _commit_check_unchanged(self, tree, name, file_id, mini_commit=None):
505
511
        rev1 = tree.commit('')
506
512
        if mini_commit is None:
507
513
            mini_commit = self.mini_commit
508
514
        rev2 = mini_commit(tree, name, name, False, False)
509
515
        tree1, tree2 = self._get_revtrees(tree, [rev1, rev2])
510
 
        self.assertEqual(rev1, tree1.inventory[name + 'id'].revision)
511
 
        self.assertEqual(rev1, tree2.inventory[name + 'id'].revision)
512
 
        file_id = name + 'id'
 
516
        self.assertEqual(rev1, tree1.inventory[file_id].revision)
 
517
        self.assertEqual(rev1, tree2.inventory[file_id].revision)
513
518
        expected_graph = {}
514
519
        expected_graph[(file_id, rev1)] = ()
515
520
        self.assertFileGraph(expected_graph, tree, (file_id, rev1))
573
578
        self._add_commit_check_unchanged(tree, 'link',
574
579
            mini_commit=self.mini_commit_record_iter_changes)
575
580
 
 
581
    def test_last_modified_revision_after_commit_reference_unchanged(self):
 
582
        # committing without changing a subtree does not change the last
 
583
        # modified.
 
584
        tree = self.make_branch_and_tree('.')
 
585
        subtree = self.make_reference('reference')
 
586
        try:
 
587
            tree.add_reference(subtree)
 
588
            self._commit_check_unchanged(tree, 'reference',
 
589
                subtree.get_root_id())
 
590
        except errors.UnsupportedOperation:
 
591
            return
 
592
 
 
593
    def test_last_modified_revision_after_commit_reference_unchanged_ric(self):
 
594
        # committing without changing a subtree does not change the last
 
595
        # modified.
 
596
        tree = self.make_branch_and_tree('.')
 
597
        subtree = self.make_reference('reference')
 
598
        try:
 
599
            tree.add_reference(subtree)
 
600
            self._commit_check_unchanged(tree, 'reference',
 
601
                subtree.get_root_id(),
 
602
                mini_commit=self.mini_commit_record_iter_changes)
 
603
        except errors.UnsupportedOperation:
 
604
            return
 
605
 
576
606
    def _add_commit_renamed_check_changed(self, tree, name,
577
607
        expect_fs_hash=False, mini_commit=None):
578
608
        def rename():
579
609
            tree.rename_one(name, 'new_' + name)
580
 
        if mini_commit is None:
581
 
            mini_commit = self.mini_commit
582
610
        self._add_commit_change_check_changed(tree, name, rename,
583
611
            expect_fs_hash=expect_fs_hash, mini_commit=mini_commit)
584
612
 
 
613
    def _commit_renamed_check_changed(self, tree, name, file_id,
 
614
        expect_fs_hash=False, mini_commit=None):
 
615
        def rename():
 
616
            tree.rename_one(name, 'new_' + name)
 
617
        self._commit_change_check_changed(tree, name, file_id, rename,
 
618
            expect_fs_hash=expect_fs_hash, mini_commit=mini_commit)
 
619
 
585
620
    def test_last_modified_revision_after_rename_dir_changes(self):
586
621
        # renaming a dir changes the last modified.
587
622
        tree = self.make_branch_and_tree('.')
625
660
        self._add_commit_renamed_check_changed(tree, 'link',
626
661
            mini_commit=self.mini_commit_record_iter_changes)
627
662
 
 
663
    def test_last_modified_revision_after_rename_ref_changes(self):
 
664
        # renaming a reference changes the last modified.
 
665
        tree = self.make_branch_and_tree('.')
 
666
        subtree = self.make_reference('reference')
 
667
        try:
 
668
            tree.add_reference(subtree)
 
669
            self._commit_renamed_check_changed(tree, 'reference',
 
670
                subtree.get_root_id())
 
671
        except errors.UnsupportedOperation:
 
672
            return
 
673
 
 
674
    def test_last_modified_revision_after_rename_ref_changes_ric(self):
 
675
        # renaming a reference changes the last modified.
 
676
        tree = self.make_branch_and_tree('.')
 
677
        subtree = self.make_reference('reference')
 
678
        try:
 
679
            tree.add_reference(subtree)
 
680
            self._commit_renamed_check_changed(tree, 'reference',
 
681
                subtree.get_root_id(),
 
682
                mini_commit=self.mini_commit_record_iter_changes)
 
683
        except errors.UnsupportedOperation:
 
684
            return
 
685
 
628
686
    def _add_commit_reparent_check_changed(self, tree, name,
629
687
        expect_fs_hash=False, mini_commit=None):
630
688
        self.build_tree(['newparent/'])
680
738
    def _add_commit_change_check_changed(self, tree, name, changer,
681
739
        expect_fs_hash=False, mini_commit=None):
682
740
        tree.add([name], [name + 'id'])
 
741
        self._commit_change_check_changed(tree, name, name + 'id',
 
742
            changer, expect_fs_hash=expect_fs_hash, mini_commit=mini_commit)
 
743
 
 
744
    def _commit_change_check_changed(self, tree, name, file_id, changer,
 
745
        expect_fs_hash=False, mini_commit=None):
683
746
        rev1 = tree.commit('')
684
747
        changer()
685
748
        if mini_commit is None:
686
749
            mini_commit = self.mini_commit
687
 
        rev2 = mini_commit(tree, name, tree.id2path(name + 'id'),
 
750
        rev2 = mini_commit(tree, name, tree.id2path(file_id),
688
751
            expect_fs_hash=expect_fs_hash)
689
752
        tree1, tree2 = self._get_revtrees(tree, [rev1, rev2])
690
 
        self.assertEqual(rev1, tree1.inventory[name + 'id'].revision)
691
 
        self.assertEqual(rev2, tree2.inventory[name + 'id'].revision)
692
 
        file_id = name + 'id'
 
753
        self.assertEqual(rev1, tree1.inventory[file_id].revision)
 
754
        self.assertEqual(rev2, tree2.inventory[file_id].revision)
693
755
        expected_graph = {}
694
756
        expected_graph[(file_id, rev1)] = ()
695
757
        expected_graph[(file_id, rev2)] = ((file_id, rev1),)
732
794
                path = tree.id2path(file_id)
733
795
                ie = inventory.make_entry(tree.kind(file_id), old_ie.name,
734
796
                    old_ie.parent_id, file_id)
 
797
                content_summary = tree.path_content_summary(path)
 
798
                if content_summary[0] == 'tree-reference':
 
799
                    content_summary = content_summary[:3] + (
 
800
                        tree.get_reference_revision(file_id),)
735
801
                return builder.record_entry_contents(ie, parent_invs, path,
736
 
                    tree, tree.path_content_summary(path))
 
802
                    tree, content_summary)
737
803
 
738
804
            file_id = tree.path2id(new_name)
739
805
            parent_id = tree.inventory[file_id].parent_id
786
852
            record a new version.
787
853
        :param delta_against_basis: True of the commit of new_name is expected
788
854
            to have a delta against the basis.
789
 
        :param expect_fs_hash: ignored, present for compatibility with test
790
 
            driver code for 'mini_commit'.
 
855
        :param expect_fs_hash: If true, looks for a fs hash output from
 
856
            record_iter_changes.
791
857
        """
792
858
        tree.lock_write()
793
859
        try:
803
869
                parent_invs.append(tree.branch.repository.revision_tree(
804
870
                    parent_id).inventory)
805
871
            changes = list(tree.iter_changes(parent_tree))
806
 
            builder.record_iter_changes(tree, parent_ids[0], changes)
 
872
            result = list(builder.record_iter_changes(tree, parent_ids[0],
 
873
                changes))
 
874
            file_id = tree.path2id(new_name)
 
875
            if expect_fs_hash:
 
876
                tree_file_stat = tree.get_file_with_stat(file_id)
 
877
                tree_file_stat[0].close()
 
878
                self.assertLength(1, result)
 
879
                result = result[0]
 
880
                self.assertEqual(result[:2], (file_id, new_name))
 
881
                self.assertEqual(result[2][0], tree.get_file_sha1(file_id))
 
882
                self.assertEqualStat(result[2][1], tree_file_stat[1])
 
883
            else:
 
884
                self.assertEqual([], result)
807
885
            delta = builder._basis_delta
808
886
            delta_dict = dict((change[2], change) for change in delta)
809
 
            file_id = tree.path2id(new_name)
810
887
            version_recorded = (file_id in delta_dict and
811
888
                delta_dict[file_id][3] is not None and
812
889
                delta_dict[file_id][3].revision == builder._new_revision_id)
958
1035
        # Make a merge which just incorporates a change from a branch:
959
1036
        # The per-file graph is straight line, and no alteration occurs
960
1037
        # in the inventory.
 
1038
        # Part 1: change in the merged branch.
961
1039
        rev1, tree2 = self._commit_sprout(tree1, name)
962
1040
        # change on the other side to merge back
963
1041
        rev2 = self._rename_in_tree(tree2, name)
964
1042
        tree1.merge_from_branch(tree2.branch)
965
1043
        if mini_commit is None:
966
1044
            mini_commit = self.mini_commit
967
 
        rev3 = mini_commit(tree1, name, 'new_' + name, False)
968
 
        tree3, = self._get_revtrees(tree1, [rev2])
969
 
        self.assertEqual(rev2, tree3.inventory[name + 'id'].revision)
970
 
        file_id = name + 'id'
971
 
        expected_graph = {}
972
 
        expected_graph[(file_id, rev1)] = ()
973
 
        expected_graph[(file_id, rev2)] = ((file_id, rev1),)
974
 
        self.assertFileGraph(expected_graph, tree1, (file_id, rev2))
 
1045
        def _check_graph(in_tree, changed_in_tree):
 
1046
            rev3 = mini_commit(in_tree, name, 'new_' + name, False,
 
1047
                delta_against_basis=changed_in_tree)
 
1048
            tree3, = self._get_revtrees(in_tree, [rev2])
 
1049
            self.assertEqual(rev2, tree3.inventory[name + 'id'].revision)
 
1050
            file_id = name + 'id'
 
1051
            expected_graph = {}
 
1052
            expected_graph[(file_id, rev1)] = ()
 
1053
            expected_graph[(file_id, rev2)] = ((file_id, rev1),)
 
1054
            self.assertFileGraph(expected_graph, in_tree, (file_id, rev2))
 
1055
        _check_graph(tree1, True)
 
1056
        # Part 2: change in the merged into branch - we use tree2 that has a
 
1057
        # change to name, branch tree1 and give it an unrelated change, then
 
1058
        # merge that to t2.
 
1059
        other_tree = tree1.bzrdir.sprout('t3').open_workingtree()
 
1060
        other_rev = other_tree.commit('')
 
1061
        tree2.merge_from_branch(other_tree.branch)
 
1062
        _check_graph(tree2, False)
975
1063
 
976
1064
    def _commit_sprout_make_merge(self, tree1, make, mini_commit=None):
977
1065
        # Make a merge which incorporates the addition of a new object to
1079
1167
        self.requireFeature(tests.SymlinkFeature)
1080
1168
        os.symlink('target', name)
1081
1169
 
 
1170
    def make_reference(self, name):
 
1171
        tree = self.make_branch_and_tree(name, format='1.9-rich-root')
 
1172
        tree.commit('foo')
 
1173
        return tree
 
1174
 
1082
1175
    def _check_kind_change(self, make_before, make_after, expect_fs_hash=False,
1083
1176
        mini_commit=None):
1084
1177
        tree = self.make_branch_and_tree('.')