icasefs: avoid normcase()-ing in util.fspath() for efficiency stable
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Fri, 16 Dec 2011 21:09:40 +0900
branchstable
changeset 15670 d6c19cfa03ce
parent 15669 390bcd01775a
child 15671 3c5e818ac679
icasefs: avoid normcase()-ing in util.fspath() for efficiency 'dirstate._normalize()', the only caller of 'util.fspath()', has already normcase()-ed path before invocation of it. normcase()-ed root can be cached on dirstate side, too. so, this patch changes 'util.fspath()' API specification to avoid normcase()-ing in it.
mercurial/dirstate.py
mercurial/util.py
--- a/mercurial/dirstate.py	Fri Dec 16 21:09:40 2011 +0900
+++ b/mercurial/dirstate.py	Fri Dec 16 21:09:40 2011 +0900
@@ -65,6 +65,10 @@
         return self._copymap
 
     @propertycache
+    def _normroot(self):
+        return util.normcase(self._root)
+
+    @propertycache
     def _foldmap(self):
         f = {}
         for name in self._map:
@@ -384,7 +388,7 @@
                 folded = path
             else:
                 folded = self._foldmap.setdefault(normed,
-                                util.fspath(path, self._root))
+                                util.fspath(normed, self._normroot))
         return folded
 
     def normalize(self, path, isknown=False):
--- a/mercurial/util.py	Fri Dec 16 21:09:40 2011 +0900
+++ b/mercurial/util.py	Fri Dec 16 21:09:40 2011 +0900
@@ -616,10 +616,10 @@
     The name is either relative to root, or it is an absolute path starting
     with root. Note that this function is unnecessary, and should not be
     called, for case-sensitive filesystems (simply because it's expensive).
+
+    Both name and root should be normcase-ed.
     '''
     # If name is absolute, make it relative
-    name = normcase(name)
-    root = normcase(root)
     if name.startswith(root):
         l = len(root)
         if name[l] == os.sep or name[l] == os.altsep: