/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-06-02 00:06:45 UTC
  • mto: (2502.1.10 fast-checkout)
  • mto: This revision was merged to the branch mainline in revision 2507.
  • Revision ID: aaron.bentley@utoronto.ca-20070602000645-51h5g95v86g8305g
Ensure renames only root children are renamed when building trees

Show diffs side-by-side

added added

removed removed

Lines of Context:
106
106
        self._new_name = {}
107
107
        self._new_parent = {}
108
108
        self._new_contents = {}
 
109
        self._limbo_files = {}
 
110
        self._needs_rename = set()
109
111
        self._removed_contents = set()
110
112
        self._new_executability = {}
111
113
        self._new_reference_revision = {}
122
124
        self._new_root = self.trans_id_tree_file_id(tree.get_root_id())
123
125
        self.__done = False
124
126
        self._pb = pb
 
127
        self.rename_count = 0
125
128
 
126
129
    def __get_root(self):
127
130
        return self._new_root
755
758
 
756
759
    def _limbo_name(self, trans_id):
757
760
        """Generate the limbo name of a file"""
758
 
        return pathjoin(self._limbodir, trans_id)
 
761
        if trans_id in self._limbo_files:
 
762
            return self._limbo_files[trans_id]
 
763
        parent = self.final_parent(trans_id)
 
764
        if parent in self._limbo_files:
 
765
            limbo_name = pathjoin(self._limbo_files[parent],
 
766
                                  self.final_name(trans_id))
 
767
        else:
 
768
            limbo_name = pathjoin(self._limbodir, trans_id)
 
769
            self._needs_rename.add(trans_id)
 
770
        self._limbo_files[trans_id] = limbo_name
 
771
        return limbo_name
759
772
 
760
773
    def _apply_removals(self, inv, inventory_delta):
761
774
        """Perform tree operations that remove directory/inventory names.
781
794
                    except OSError, e:
782
795
                        if e.errno != errno.ENOENT:
783
796
                            raise
 
797
                    else:
 
798
                        self.rename_count += 1
784
799
                if trans_id in self._removed_id:
785
800
                    if trans_id == self._new_root:
786
801
                        file_id = self._tree.inventory.root.file_id
812
827
                if trans_id in self._new_contents or \
813
828
                    self.path_changed(trans_id):
814
829
                    full_path = self._tree.abspath(path)
815
 
                    try:
816
 
                        os.rename(self._limbo_name(trans_id), full_path)
817
 
                    except OSError, e:
818
 
                        # We may be renaming a dangling inventory id
819
 
                        if e.errno != errno.ENOENT:
820
 
                            raise
 
830
                    if trans_id in self._needs_rename:
 
831
                        try:
 
832
                            os.rename(self._limbo_name(trans_id), full_path)
 
833
                        except OSError, e:
 
834
                            # We may be renaming a dangling inventory id
 
835
                            if e.errno != errno.ENOENT:
 
836
                                raise
 
837
                        else:
 
838
                            self.rename_count += 1
821
839
                    if trans_id in self._new_contents:
822
840
                        modified_paths.append(full_path)
823
841
                        del self._new_contents[trans_id]
1223
1241
    finally:
1224
1242
        tt.finalize()
1225
1243
        top_pb.finished()
 
1244
    return tt
1226
1245
 
1227
1246
 
1228
1247
def _reparent_children(tt, old_parent, new_parent):