~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transform.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2006-05-25 09:28:36 UTC
  • mfrom: (1534.10.33 bzr.ttransform)
  • Revision ID: pqm@pqm.ubuntu.com-20060525092836-8e8381f8f4d69909
Performance tweak for TreeTransform.canonical_path

Show diffs side-by-side

added added

removed removed

Lines of Context:
101
101
        self._removed_id = set()
102
102
        self._tree_path_ids = {}
103
103
        self._tree_id_paths = {}
 
104
        self._realpaths = {}
 
105
        # Cache of realpath results, to speed up canonical_path
 
106
        self._relpaths = {}
 
107
        # Cache of relpath results, to speed up canonical_path
104
108
        self._new_root = self.trans_id_tree_file_id(tree.get_root_id())
105
109
        self.__done = False
106
110
        self._pb = pb
211
215
    def canonical_path(self, path):
212
216
        """Get the canonical tree-relative path"""
213
217
        # don't follow final symlinks
214
 
        dirname, basename = os.path.split(self._tree.abspath(path))
215
 
        dirname = os.path.realpath(dirname)
216
 
        return self._tree.relpath(pathjoin(dirname, basename))
 
218
        abs = self._tree.abspath(path)
 
219
        if abs in self._relpaths:
 
220
            return self._relpaths[abs]
 
221
        dirname, basename = os.path.split(abs)
 
222
        if dirname not in self._realpaths:
 
223
            self._realpaths[dirname] = os.path.realpath(dirname)
 
224
        dirname = self._realpaths[dirname]
 
225
        abs = pathjoin(dirname, basename)
 
226
        if dirname in self._relpaths:
 
227
            relpath = pathjoin(self._relpaths[dirname], basename)
 
228
            relpath = relpath.rstrip('/\\')
 
229
        else:
 
230
            relpath = self._tree.relpath(abs)
 
231
        self._relpaths[abs] = relpath
 
232
        return relpath
217
233
 
218
234
    def trans_id_tree_path(self, path):
219
235
        """Determine (and maybe set) the transaction ID for a tree path."""