dirstate._normalize: don't construct dirfoldmap if not necessary
Constructing the dirfoldmap is expensive, so if there's a hit in the
filefoldmap, don't construct the directory foldmap.
This helps with cases like 'hg add foo' where foo is already tracked: for a
large repository, the operation goes from 1.5 seconds to 1.2 (which is still
way too much, but that's a matter for another day.)
--- a/mercurial/dirstate.py Tue Mar 31 19:29:39 2015 -0700
+++ b/mercurial/dirstate.py Tue Mar 31 19:34:37 2015 -0700
@@ -509,8 +509,9 @@
def _normalize(self, path, isknown, ignoremissing=False, exists=None):
normed = util.normcase(path)
- folded = self._filefoldmap.get(normed,
- self._dirfoldmap.get(normed, None))
+ folded = self._filefoldmap.get(normed, None)
+ if folded is None:
+ folded = self._dirfoldmap.get(normed, None)
if folded is None:
if isknown:
folded = path