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.
--- 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: