[PATCH 3 of 3 V2] dirstate._walkexplicit: don't bother normalizing '.'
sid0 at fb.com
Mon Mar 30 01:36:13 CDT 2015
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1427678928 25200
# Sun Mar 29 18:28:48 2015 -0700
# Node ID 64ded2aa226dbe1d2e1f96ec476d707cabe8e56e
# Parent a05be84438fb2a502590b7ae7d5001308b558c03
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
@@ -634,7 +634,9 @@
alldirs = None
for ff in files:
- if normalize:
+ # constructing the foldmap is expensive, so don't do it for the
+ # common case where files is ['.']
+ if normalize and ff != '.':
nf = normalize(ff, False, True)
nf = ff
More information about the Mercurial-devel