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

  • Committer: Jelmer Vernooij
  • Date: 2020-02-13 23:57:28 UTC
  • mfrom: (7490 work)
  • mto: This revision was merged to the branch mainline in revision 7492.
  • Revision ID: jelmer@jelmer.uk-20200213235728-m6ds0mm3mbs4y182
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
 
17
from __future__ import absolute_import
 
18
 
17
19
import contextlib
18
20
 
19
21
from .lazy_import import lazy_import
30
32
    revision as _mod_revision,
31
33
    textfile,
32
34
    trace,
 
35
    transform,
33
36
    tree as _mod_tree,
34
37
    tsort,
35
38
    ui,
46
49
    errors,
47
50
    hooks,
48
51
    registry,
49
 
    transform,
50
52
    )
51
53
# TODO: Report back as changes are merged in
52
54
 
758
760
            stack.enter_context(self.this_tree.lock_read())
759
761
            stack.enter_context(self.base_tree.lock_read())
760
762
            stack.enter_context(self.other_tree.lock_read())
761
 
            self.tt = self.working_tree.transform()
 
763
            self.tt = self.working_tree.get_transform()
762
764
            stack.enter_context(self.tt)
763
765
            self._compute_transform()
764
766
            results = self.tt.apply(no_conflicts=True)
770
772
 
771
773
    def make_preview_transform(self):
772
774
        with self.base_tree.lock_read(), self.other_tree.lock_read():
773
 
            self.tt = self.working_tree.preview_transform()
 
775
            self.tt = transform.TransformPreview(self.working_tree)
774
776
            self._compute_transform()
775
777
            return self.tt
776
778
 
777
779
    def _compute_transform(self):
778
780
        if self._lca_trees is None:
779
 
            entries = list(self._entries3())
 
781
            entries = self._entries3()
780
782
            resolver = self._three_way
781
783
        else:
782
 
            entries = list(self._entries_lca())
 
784
            entries = self._entries_lca()
783
785
            resolver = self._lca_multi_way
784
786
        # Prepare merge hooks
785
787
        factories = Merger.hooks['merge_file_content']
790
792
            for num, (file_id, changed, paths3, parents3, names3,
791
793
                      executable3) in enumerate(entries):
792
794
                trans_id = self.tt.trans_id_file_id(file_id)
 
795
 
793
796
                # Try merging each entry
794
797
                child_pb.update(gettext('Preparing file merge'),
795
798
                                num, len(entries))
830
833
        other and this.  names3 is a tuple of names for base, other and this.
831
834
        executable3 is a tuple of execute-bit values for base, other and this.
832
835
        """
 
836
        result = []
833
837
        iterator = self.other_tree.iter_changes(self.base_tree,
834
838
                                                specific_files=self.interesting_files,
835
839
                                                extra_trees=[self.this_tree])
857
861
            names3 = change.name + (this_name,)
858
862
            paths3 = change.path + (this_path, )
859
863
            executable3 = change.executable + (this_executable,)
860
 
            yield (
 
864
            result.append(
861
865
                (change.file_id, change.changed_content, paths3,
862
866
                 parents3, names3, executable3))
 
867
        return result
863
868
 
864
869
    def _entries_lca(self):
865
870
        """Gather data about files modified between multiple trees.
888
893
                self.interesting_files, lookup_trees)
889
894
        else:
890
895
            interesting_files = None
 
896
        result = []
891
897
        from .multiwalker import MultiWalker
892
898
        walker = MultiWalker(self.other_tree, self._lca_trees)
893
899
 
1031
1037
                    raise AssertionError('unhandled kind: %s' % other_ie.kind)
1032
1038
 
1033
1039
            # If we have gotten this far, that means something has changed
1034
 
            yield (file_id, content_changed,
 
1040
            result.append((file_id, content_changed,
1035
1041
                           ((base_path, lca_paths),
1036
1042
                            other_path, this_path),
1037
1043
                           ((base_ie.parent_id, lca_parent_ids),
1040
1046
                            other_ie.name, this_ie.name),
1041
1047
                           ((base_ie.executable, lca_executable),
1042
1048
                            other_ie.executable, this_ie.executable)
1043
 
                           )
 
1049
                           ))
 
1050
        return result
1044
1051
 
1045
1052
    def write_modified(self, results):
1046
1053
        if not self.working_tree.supports_merge_modified():
1279
1286
                    keep_this = True
1280
1287
                    # versioning the merged file will trigger a duplicate
1281
1288
                    # conflict
1282
 
                    self.tt.version_file(trans_id, file_id=file_id)
 
1289
                    self.tt.version_file(file_id, trans_id)
1283
1290
                    transform.create_from_tree(
1284
1291
                        self.tt, trans_id, self.other_tree,
1285
1292
                        other_path,
1326
1333
        else:
1327
1334
            raise AssertionError('unknown hook_status: %r' % (hook_status,))
1328
1335
        if not this_path and result == "modified":
1329
 
            self.tt.version_file(trans_id, file_id=file_id)
 
1336
            self.tt.version_file(file_id, trans_id)
1330
1337
        if not keep_this:
1331
1338
            # The merge has been performed and produced a new content, so the
1332
1339
            # old contents should not be retained.
1456
1463
            data.append(('BASE', self.base_tree, base_path, base_lines))
1457
1464
 
1458
1465
        # We need to use the actual path in the working tree of the file here,
1459
 
        if self.this_tree.supports_content_filtering():
1460
 
            filter_tree_path = this_path
 
1466
        # ignoring the conflict suffixes
 
1467
        wt = self.this_tree
 
1468
        if wt.supports_content_filtering():
 
1469
            try:
 
1470
                filter_tree_path = wt.id2path(file_id)
 
1471
            except errors.NoSuchId:
 
1472
                # file has been deleted
 
1473
                filter_tree_path = None
1461
1474
        else:
1462
1475
            # Skip the id2path lookup for older formats
1463
1476
            filter_tree_path = None
1471
1484
                    filter_tree_path)
1472
1485
                file_group.append(trans_id)
1473
1486
                if set_version and not versioned:
1474
 
                    self.tt.version_file(trans_id, file_id=file_id)
 
1487
                    self.tt.version_file(file_id, trans_id)
1475
1488
                    versioned = True
1476
1489
        return file_group
1477
1490