/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/per_intertree/test_compare.py

  • Committer: Breezy landing bot
  • Author(s): Jelmer Vernooij
  • Date: 2019-06-15 17:53:40 UTC
  • mfrom: (7322.1.8 objects-1)
  • Revision ID: breezy.the.bot@gmail.com-20190615175340-yxo036zu96wh8lcz
Use the new attributes on TreeChange rather than indexing.

Merged from https://code.launchpad.net/~jelmer/brz/objects-1/+merge/368859

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
    transform,
27
27
    )
28
28
from breezy.osutils import has_symlinks
 
29
from breezy.tree import TreeChange
29
30
from breezy.tests.per_intertree import TestCaseWithTwoTrees
30
31
from breezy.tests import (
31
32
    features,
50
51
 
51
52
def _change_key(change):
52
53
    """Return a valid key for sorting Tree.iter_changes entries."""
53
 
    (file_id, paths, content_changed, versioned, parent, name, kind,
54
 
     executable) = change
55
 
    return (file_id or b'', (paths[0] or '', paths[1] or ''), versioned,
56
 
            parent, name, kind, executable)
 
54
    return (change.file_id or b'', (change.path[0] or '', change.path[1] or ''),
 
55
            change.versioned, change.parent_id, change.name, change.kind,
 
56
            change.executable)
57
57
 
58
58
 
59
59
class TestCompare(TestCaseWithTwoTrees):
553
553
 
554
554
    def added(self, tree, file_id):
555
555
        path, entry = self.get_path_entry(tree, file_id)
556
 
        return (file_id, (None, path), True, (False, True), (None, entry.parent_id),
557
 
                (None, entry.name), (None, entry.kind),
558
 
                (None, entry.executable))
 
556
        return TreeChange(
 
557
            file_id, (None, path), True, (False, True), (None, entry.parent_id),
 
558
            (None, entry.name), (None, entry.kind),
 
559
            (None, entry.executable))
559
560
 
560
561
    @staticmethod
561
562
    def get_path_entry(tree, file_id):
569
570
 
570
571
    def content_changed(self, tree, file_id):
571
572
        path, entry = self.get_path_entry(tree, file_id)
572
 
        return (file_id, (path, path), True, (True, True),
573
 
                (entry.parent_id, entry.parent_id),
574
 
                (entry.name, entry.name), (entry.kind, entry.kind),
575
 
                (entry.executable, entry.executable))
 
573
        return TreeChange(
 
574
            file_id, (path, path), True, (True, True),
 
575
            (entry.parent_id, entry.parent_id),
 
576
            (entry.name, entry.name), (entry.kind, entry.kind),
 
577
            (entry.executable, entry.executable))
576
578
 
577
579
    def kind_changed(self, from_tree, to_tree, file_id):
578
580
        from_path, old_entry = self.get_path_entry(from_tree, file_id)
579
581
        path, new_entry = self.get_path_entry(to_tree, file_id)
580
 
        return (file_id, (from_path, path), True, (True, True),
581
 
                (old_entry.parent_id, new_entry.parent_id),
582
 
                (old_entry.name, new_entry.name),
583
 
                (old_entry.kind, new_entry.kind),
584
 
                (old_entry.executable, new_entry.executable))
 
582
        return TreeChange(
 
583
            file_id, (from_path, path), True, (True, True),
 
584
            (old_entry.parent_id, new_entry.parent_id),
 
585
            (old_entry.name, new_entry.name),
 
586
            (old_entry.kind, new_entry.kind),
 
587
            (old_entry.executable, new_entry.executable))
585
588
 
586
589
    def missing(self, file_id, from_path, to_path, parent_id, kind):
587
590
        _, from_basename = os.path.split(from_path)
588
591
        _, to_basename = os.path.split(to_path)
589
592
        # missing files have both paths, but no kind.
590
 
        return (file_id, (from_path, to_path), True, (True, True),
591
 
                (parent_id, parent_id),
592
 
                (from_basename, to_basename), (kind, None), (False, False))
 
593
        return TreeChange(
 
594
            file_id, (from_path, to_path), True, (True, True),
 
595
            (parent_id, parent_id),
 
596
            (from_basename, to_basename), (kind, None), (False, False))
593
597
 
594
598
    def deleted(self, tree, file_id):
595
599
        entry = tree.root_inventory.get_entry(file_id)
596
600
        path = tree.id2path(file_id)
597
 
        return (file_id, (path, None), True, (True, False), (entry.parent_id, None),
598
 
                (entry.name, None), (entry.kind, None),
599
 
                (entry.executable, None))
 
601
        return TreeChange(
 
602
            file_id, (path, None), True, (True, False), (entry.parent_id, None),
 
603
            (entry.name, None), (entry.kind, None),
 
604
            (entry.executable, None))
600
605
 
601
606
    def renamed(self, from_tree, to_tree, file_id, content_changed):
602
607
        from_path, from_entry = self.get_path_entry(from_tree, file_id)
603
608
        to_path, to_entry = self.get_path_entry(to_tree, file_id)
604
 
        return (file_id, (from_path, to_path), content_changed, (True, True),
605
 
                (from_entry.parent_id, to_entry.parent_id),
606
 
                (from_entry.name, to_entry.name),
607
 
                (from_entry.kind, to_entry.kind),
608
 
                (from_entry.executable, to_entry.executable))
 
609
        return TreeChange(
 
610
            file_id, (from_path, to_path), content_changed, (True, True),
 
611
            (from_entry.parent_id, to_entry.parent_id),
 
612
            (from_entry.name, to_entry.name),
 
613
            (from_entry.kind, to_entry.kind),
 
614
            (from_entry.executable, to_entry.executable))
609
615
 
610
616
    def unchanged(self, tree, file_id):
611
617
        path, entry = self.get_path_entry(tree, file_id)
613
619
        name = entry.name
614
620
        kind = entry.kind
615
621
        executable = entry.executable
616
 
        return (file_id, (path, path), False, (True, True),
617
 
                (parent, parent), (name, name), (kind, kind),
618
 
                (executable, executable))
 
622
        return TreeChange(
 
623
            file_id, (path, path), False, (True, True),
 
624
            (parent, parent), (name, name), (kind, kind),
 
625
            (executable, executable))
619
626
 
620
627
    def unversioned(self, tree, path):
621
628
        """Create an unversioned result."""
622
629
        _, basename = os.path.split(path)
623
630
        kind = tree._comparison_data(None, path)[0]
624
 
        return (None, (None, path), True, (False, False), (None, None),
625
 
                (None, basename), (None, kind),
626
 
                (None, False))
 
631
        return TreeChange(
 
632
            None, (None, path), True, (False, False), (None, None),
 
633
            (None, basename), (None, kind),
 
634
            (None, False))
627
635
 
628
636
    def sorted(self, changes):
629
637
        return sorted(changes, key=_change_key)
1086
1094
        tree1, tree2 = self.mutable_trees_to_locked_test_trees(tree1, tree2)
1087
1095
        self.not_applicable_if_missing_in('file', tree1)
1088
1096
        root_id = tree1.path2id('')
1089
 
        expected = [(b'file-id', ('file', None), False, (True, False),
1090
 
                     (root_id, None), ('file', None), (None, None), (False, None))]
 
1097
        expected = [
 
1098
            TreeChange(b'file-id', ('file', None), False, (True, False),
 
1099
                       (root_id, None), ('file', None), (None, None), (False, None))]
1091
1100
        self.assertEqual(expected, self.do_iter_changes(tree1, tree2))
1092
1101
 
1093
1102
    def test_only_in_target_and_missing(self):
1100
1109
        tree1, tree2 = self.mutable_trees_to_locked_test_trees(tree1, tree2)
1101
1110
        self.not_applicable_if_missing_in('file', tree2)
1102
1111
        root_id = tree1.path2id('')
1103
 
        expected = [(b'file-id', (None, 'file'), False, (False, True),
1104
 
                     (None, root_id), (None, 'file'), (None, None), (None, False))]
 
1112
        expected = [
 
1113
            TreeChange(b'file-id', (None, 'file'), False, (False, True),
 
1114
                       (None, root_id), (None, 'file'), (None, None), (None, False))]
1105
1115
        self.assertEqual(expected, self.do_iter_changes(tree1, tree2))
1106
1116
 
1107
1117
    def test_only_in_target_missing_subtree_specific_bug_367632(self):
1116
1126
        self.not_applicable_if_missing_in('a-dir', tree2)
1117
1127
        root_id = tree1.path2id('')
1118
1128
        expected = [
1119
 
            (b'dir-id', (None, 'a-dir'), False, (False, True),
1120
 
             (None, root_id), (None, 'a-dir'), (None, None), (None, False)),
1121
 
            (b'file-id', (None, 'a-dir/a-file'), False, (False, True),
1122
 
             (None, b'dir-id'), (None, 'a-file'), (None, None), (None, False))
 
1129
            TreeChange(
 
1130
                b'dir-id', (None, 'a-dir'), False, (False, True),
 
1131
                (None, root_id), (None, 'a-dir'), (None, None), (None, False)),
 
1132
            TreeChange(
 
1133
                b'file-id', (None, 'a-dir/a-file'), False, (False, True),
 
1134
                (None, b'dir-id'), (None, 'a-file'), (None, None), (None, False))
1123
1135
            ]
1124
1136
        # bug 367632 showed that specifying the root broke some code paths,
1125
1137
        # so we check this contract with and without it.
1136
1148
        tree1, tree2 = self.mutable_trees_to_locked_test_trees(tree1, tree2)
1137
1149
        self.assertEqual(sorted([self.unchanged(tree1, b'root-id'),
1138
1150
                                 self.unchanged(tree1, b'b-id'),
1139
 
                                 (b'a-id', ('a', 'd'), True, (True, True),
1140
 
                                  (b'root-id', b'root-id'), ('a',
1141
 
                                                             'd'), ('file', 'file'),
1142
 
                                  (False, False)), self.unchanged(tree1, b'c-id')]),
 
1151
                                 TreeChange(
 
1152
                                     b'a-id', ('a', 'd'), True, (True, True),
 
1153
                                     (b'root-id', b'root-id'), ('a', 'd'),
 
1154
                                     ('file', 'file'),
 
1155
                                     (False, False)), self.unchanged(tree1, b'c-id')]),
1143
1156
                         self.do_iter_changes(tree1, tree2, include_unchanged=True))
1144
1157
 
1145
1158
    def test_compare_subtrees(self):
1163
1176
        self.assertEqual([], list(tree2.iter_changes(tree1)))
1164
1177
        subtree1.commit('commit', rev_id=b'commit-a')
1165
1178
        self.assertEqual([
1166
 
            (b'root-id',
1167
 
             (u'', u''),
1168
 
             False,
1169
 
             (True, True),
1170
 
             (None, None),
1171
 
             (u'', u''),
1172
 
             ('directory', 'directory'),
1173
 
             (False, False)),
1174
 
            (b'subtree-id',
1175
 
             ('sub', 'sub',),
1176
 
             False,
1177
 
             (True, True),
1178
 
             (b'root-id', b'root-id'),
1179
 
             ('sub', 'sub'),
1180
 
             ('tree-reference', 'tree-reference'),
1181
 
             (False, False))],
 
1179
            TreeChange(
 
1180
                b'root-id',
 
1181
                (u'', u''),
 
1182
                False,
 
1183
                (True, True),
 
1184
                (None, None),
 
1185
                (u'', u''),
 
1186
                ('directory', 'directory'),
 
1187
                (False, False)),
 
1188
            TreeChange(
 
1189
                b'subtree-id',
 
1190
                ('sub', 'sub',),
 
1191
                False,
 
1192
                (True, True),
 
1193
                (b'root-id', b'root-id'),
 
1194
                ('sub', 'sub'),
 
1195
                ('tree-reference', 'tree-reference'),
 
1196
                (False, False))],
1182
1197
            list(tree2.iter_changes(tree1,
1183
1198
                                    include_unchanged=True)))
1184
1199