~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transform.py

  • Committer: Aaron Bentley
  • Date: 2007-12-31 05:35:39 UTC
  • mto: This revision was merged to the branch mainline in revision 3241.
  • Revision ID: aaron.bentley@utoronto.ca-20071231053539-lpxc6wewg2r17bd9
Eliminate direct use of inventory from transform application

Show diffs side-by-side

added added

removed removed

Lines of Context:
880
880
            conflicts = self.find_conflicts()
881
881
            if len(conflicts) != 0:
882
882
                raise MalformedTransform(conflicts=conflicts)
883
 
        inv = self._tree.inventory
884
883
        inventory_delta = []
885
884
        child_pb = bzrlib.ui.ui_factory.nested_progress_bar()
886
885
        try:
892
891
                child_pb.update('Apply phase', 0, 2)
893
892
                self._apply_removals(inventory_delta, mover)
894
893
                child_pb.update('Apply phase', 1, 2)
895
 
                modified_paths = self._apply_insertions(inv, inventory_delta,
896
 
                                                        mover)
 
894
                modified_paths = self._apply_insertions(inventory_delta, mover)
897
895
            except:
898
896
                mover.rollback()
899
897
                raise
987
985
        finally:
988
986
            child_pb.finished()
989
987
 
990
 
    def _apply_insertions(self, inv, inventory_delta, mover):
 
988
    def _apply_insertions(self, inventory_delta, mover):
991
989
        """Perform tree operations that insert directory/inventory names.
992
990
        
993
991
        That is, create any files that need to be created, and restore from
1002
1000
            for num, (path, trans_id) in enumerate(new_paths):
1003
1001
                new_entry = None
1004
1002
                child_pb.update('adding file', num, len(new_paths))
1005
 
                try:
1006
 
                    kind = self._new_contents[trans_id]
1007
 
                except KeyError:
1008
 
                    kind = contents = None
1009
1003
                if trans_id in self._new_contents or \
1010
1004
                    self.path_changed(trans_id):
1011
1005
                    full_path = self._tree.abspath(path)
1021
1015
                    if trans_id in self._new_contents:
1022
1016
                        modified_paths.append(full_path)
1023
1017
                        completed_new.append(trans_id)
1024
 
 
1025
 
                if trans_id in self._new_id:
1026
 
                    if kind is None:
1027
 
                        kind = file_kind(self._tree.abspath(path))
 
1018
                file_id = self.final_file_id(trans_id)
 
1019
                if file_id is not None and (trans_id in self._new_id or
 
1020
                    trans_id in self._new_name or trans_id in self._new_parent
 
1021
                    or trans_id in self._new_executability):
 
1022
                    try:
 
1023
                        kind = self.final_kind(trans_id)
 
1024
                    except NoSuchFile:
 
1025
                        kind = self._tree.stored_kind(file_id)
1028
1026
                    if trans_id in self._new_reference_revision:
1029
1027
                        new_entry = inventory.TreeReference(
1030
 
                            self._new_id[trans_id],
 
1028
                            self.final_file_id(trans_id),
1031
1029
                            self._new_name[trans_id], 
1032
1030
                            self.final_file_id(self._new_parent[trans_id]),
1033
1031
                            None, self._new_reference_revision[trans_id])
1035
1033
                        new_entry = inventory.make_entry(kind,
1036
1034
                            self.final_name(trans_id),
1037
1035
                            self.final_file_id(self.final_parent(trans_id)),
1038
 
                            self._new_id[trans_id])
1039
 
                else:
1040
 
                    if trans_id in self._new_name or trans_id in\
1041
 
                        self._new_parent or\
1042
 
                        trans_id in self._new_executability:
1043
 
                        file_id = self.final_file_id(trans_id)
1044
 
                        if file_id is not None:
1045
 
                            entry = inv[file_id]
1046
 
                            new_entry = entry.copy()
1047
 
 
1048
 
                    if trans_id in self._new_name or trans_id in\
1049
 
                        self._new_parent:
1050
 
                            if new_entry is not None:
1051
 
                                new_entry.name = self.final_name(trans_id)
1052
 
                                parent = self.final_parent(trans_id)
1053
 
                                parent_id = self.final_file_id(parent)
1054
 
                                new_entry.parent_id = parent_id
 
1036
                            self.final_file_id(trans_id))
 
1037
                    try:
 
1038
                        old_path = self._tree.id2path(new_entry.file_id)
 
1039
                    except errors.NoSuchId:
 
1040
                        old_path = None
 
1041
                    inventory_delta.append((old_path, path, new_entry.file_id,
 
1042
                                            new_entry))
1055
1043
 
1056
1044
                if trans_id in self._new_executability:
1057
1045
                    self._set_executability(path, new_entry, trans_id)
1058
 
                if new_entry is not None:
1059
 
                    if new_entry.file_id in inv:
1060
 
                        old_path = inv.id2path(new_entry.file_id)
1061
 
                    else:
1062
 
                        old_path = None
1063
 
                    inventory_delta.append((old_path, path,
1064
 
                                            new_entry.file_id,
1065
 
                                            new_entry))
1066
1046
        finally:
1067
1047
            child_pb.finished()
1068
1048
        for trans_id in completed_new: