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

  • Committer: Aaron Bentley
  • Date: 2007-03-26 19:06:17 UTC
  • mto: This revision was merged to the branch mainline in revision 2393.
  • Revision ID: abentley@panoramicfeedback.com-20070326190617-bclsdw1gm75ynf05
Switch TreeTransform to use WT.apply_inventory_delta

Show diffs side-by-side

added added

removed removed

Lines of Context:
748
748
            modified_paths = self._apply_insertions(inv, limbo_inv)
749
749
        finally:
750
750
            child_pb.finished()
751
 
        self._tree._write_inventory(inv)
 
751
        self._tree.apply_inventory_delta(self.__inventory_delta)
752
752
        self.__done = True
753
753
        self.finalize()
754
754
        return _TransformResults(modified_paths)
764
764
        need renaming into limbo.  This must be done in strict child-to-parent
765
765
        order.
766
766
        """
 
767
        self.__inventory_delta = []
767
768
        tree_paths = list(self._tree_path_ids.iteritems())
768
769
        tree_paths.sort(reverse=True)
769
770
        child_pb = bzrlib.ui.ui_factory.nested_progress_bar()
786
787
                        file_id = self._tree.inventory.root.file_id
787
788
                    else:
788
789
                        file_id = self.tree_file_id(trans_id)
789
 
                    del inv[file_id]
790
 
                elif trans_id in self._new_name or trans_id in self._new_parent:
791
 
                    file_id = self.tree_file_id(trans_id)
792
 
                    if file_id is not None:
793
 
                        limbo_inv[trans_id] = inv[file_id]
794
 
                        inv.remove_recursive_id(file_id)
 
790
                    assert file_id is not None
 
791
                    self.__inventory_delta.append((path, None, file_id,
 
792
                                                  None))
795
793
        finally:
796
794
            child_pb.finished()
797
795
 
807
805
        child_pb = bzrlib.ui.ui_factory.nested_progress_bar()
808
806
        try:
809
807
            for num, (path, trans_id) in enumerate(new_paths):
 
808
                new_entry = None
810
809
                child_pb.update('adding file', num, len(new_paths))
811
810
                try:
812
811
                    kind = self._new_contents[trans_id]
829
828
                    if kind is None:
830
829
                        kind = file_kind(self._tree.abspath(path))
831
830
                    if trans_id in self._new_reference_revision:
832
 
                        entry = inventory.TreeReference(self._new_id[trans_id], 
 
831
                        new_entry = inventory.TreeReference(
 
832
                            self._new_id[trans_id],
833
833
                            self._new_name[trans_id], 
834
834
                            self.final_file_id(self._new_parent[trans_id]),
835
835
                            None, self._new_reference_revision[trans_id])
836
 
                        inv.add(entry)
837
836
                    else:
838
 
                        inv.add_path(path, kind, self._new_id[trans_id])
839
 
                elif trans_id in self._new_name or trans_id in\
840
 
                    self._new_parent:
841
 
                    entry = limbo_inv.get(trans_id)
842
 
                    if entry is not None:
843
 
                        entry.name = self.final_name(trans_id)
844
 
                        parent_path = os.path.dirname(path)
845
 
                        entry.parent_id = \
846
 
                            self._tree.inventory.path2id(parent_path)
847
 
                        inv.add(entry)
848
 
 
849
 
                # requires files and inventory entries to be in place
 
837
                        new_entry = inventory.make_entry(kind,
 
838
                            self.final_name(trans_id),
 
839
                            self.final_file_id(self.final_parent(trans_id)),
 
840
                            self._new_id[trans_id])
 
841
                else:
 
842
                    if trans_id in self._new_name or trans_id in\
 
843
                        self._new_parent or\
 
844
                        trans_id in self._new_executability:
 
845
                        file_id = self.final_file_id(trans_id)
 
846
                        if file_id is not None:
 
847
                            entry = inv[file_id]
 
848
                            new_entry = entry.copy()
 
849
 
 
850
                    if trans_id in self._new_name or trans_id in\
 
851
                        self._new_parent:
 
852
                            if new_entry is not None:
 
853
                                new_entry.name = self.final_name(trans_id)
 
854
                                parent = self.final_parent(trans_id)
 
855
                                parent_id = self.final_file_id(parent)
 
856
                                new_entry.parent_id = parent_id
 
857
 
850
858
                if trans_id in self._new_executability:
851
 
                    self._set_executability(path, inv, trans_id)
 
859
                    self._set_executability(path, new_entry, trans_id)
 
860
                if new_entry is not None:
 
861
                    if new_entry.file_id in inv:
 
862
                        old_path = inv.id2path(new_entry.file_id)
 
863
                    else:
 
864
                        old_path = None
 
865
                    self.__inventory_delta.append((old_path, path,
 
866
                                                   new_entry.file_id,
 
867
                                                   new_entry))
852
868
        finally:
853
869
            child_pb.finished()
854
870
        return modified_paths
855
871
 
856
 
    def _set_executability(self, path, inv, trans_id):
 
872
    def _set_executability(self, path, entry, trans_id):
857
873
        """Set the executability of versioned files """
858
 
        file_id = inv.path2id(path)
859
874
        new_executability = self._new_executability[trans_id]
860
 
        inv[file_id].executable = new_executability
 
875
        entry.executable = new_executability
861
876
        if supports_executable():
862
877
            abspath = self._tree.abspath(path)
863
878
            current_mode = os.stat(abspath).st_mode