[PATCH] dirstate._walkexplicit: don't bother normalizing ''
Siddharth Agarwal
sid0 at fb.com
Mon Mar 30 03:40:10 UTC 2015
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1427678928 25200
# Sun Mar 29 18:28:48 2015 -0700
# Node ID da9074bcbd34008b2615f019fd57d203b80425e1
# Parent efa094701a05d58d505c3b0c3b3c73dba4e51e97
dirstate._walkexplicit: don't bother normalizing ''
The overwhelmingly common case is running commands like 'hg diff' with no
arguments. Therefore the only file that'll be listed is the root directory.
Normalizing that's just a waste of time.
This means that for a plain 'hg diff' we'll never need to construct the
foldmap, saving us a significant chunk of time.
On case-insensitive HFS+ on OS X, for a large repository with over 200,000
files, this brings down 'hg diff' from 2.97 seconds to 2.36.
diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -635,10 +635,15 @@
alldirs = None
for ff in files:
- if normalize:
- nf = normalize(normpath(ff), False, True)
+ # constructing the foldmap is expensive, so don't do it for the
+ # common case where files is ['']
+ if ff != '':
+ if normalize:
+ nf = normalize(normpath(ff), False, True)
+ else:
+ nf = normpath(ff)
else:
- nf = normpath(ff)
+ nf = '.'
if nf in results:
continue
More information about the Mercurial-devel
mailing list