[PATCH] dirstate._walkexplicit: don't bother normalizing ''
Siddharth Agarwal
sid at less-broken.com
Mon Mar 30 01:25:22 CDT 2015
On 03/29/2015 09:31 PM, Martin von Zweigbergk wrote:
>
>
> On Sun, Mar 29, 2015 at 8:41 PM Siddharth Agarwal <sid0 at fb.com
> <mailto:sid0 at fb.com>> wrote:
>
> # HG changeset patch
> # User Siddharth Agarwal <sid0 at fb.com <mailto: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 = '.'
>
>
> Nit: It might be simpler to call normpath() first:
>
> nf = normpath(ff)
> if nf != '.' and normalize:
> nf = normalize(nf, False, True)
>
> Slightly off topic: When does normpath have any effect anyway? The
> paths get here through a matcher and the matcher seems to normalize
> all paths. The only effect normpath seems to have is to convert '' to
> '.' (i.e. back to what it was before we converted from '.' to '' a few
> lines up).
I suspect you're completely correct. Let me double check then send out
patches cleaning this up.
- Siddharth
More information about the Mercurial-devel
mailing list