[PATCH] addremove: don't do full walks

Augie Fackler raf at durin42.com
Thu Sep 5 10:51:47 CDT 2013


On Wed, Sep 04, 2013 at 06:48:06PM -0700, Siddharth Agarwal wrote:
> # HG changeset patch
> # User Siddharth Agarwal <sid0 at fb.com>
> # Date 1378345375 25200
> #      Wed Sep 04 18:42:55 2013 -0700
> # Node ID c11bcb87c9338b29a67fc6e260d50b9a18705994
> # Parent  5e8173f8486bce989a7439bd8ca24078864a62d8
> addremove: don't do full walks

queued, thanks

>
> Full walks are only necessary when the caller needs the list of clean files.
> addremove by definition doesn't need them.
>
> With this patch and an extension that produces a subset of results for
> dirstate.walk when full is False, on a repository with over 200,000 files, hg
> addremove drops from 2.8 seconds to 0.5.
>
> diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
> --- a/mercurial/scmutil.py
> +++ b/mercurial/scmutil.py
> @@ -755,7 +755,8 @@
>
>      ctx = repo[None]
>      dirstate = repo.dirstate
> -    walkresults = dirstate.walk(matcher, sorted(ctx.substate), True, False)
> +    walkresults = dirstate.walk(matcher, sorted(ctx.substate), True, False,
> +                                full=False)
>      for abs, st in walkresults.iteritems():
>          dstate = dirstate[abs]
>          if dstate == '?' and audit_path.check(abs):
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list