[PATCH] dirstate: avoid invalidating every entries when list is empty

Martin von Zweigbergk martinvonz at google.com
Fri Jun 5 00:24:22 CDT 2015


On Thu, Jun 4, 2015 at 10:20 PM Pierre-Yves David <
pierre-yves.david at ens-lyon.org> wrote:

> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1433481032 25200
> #      Thu Jun 04 22:10:32 2015 -0700
> # Node ID 88a6501758d2779176b47f23a0bca33f563881d8
> # Parent  51e7acc34b0ab0e540dffdb22127914f2353d5e2
> dirstate: avoid invalidating every entries when list is empty
>
> Default value was not tested with 'is None', this made empty list seen as
> default value and result the invalidation of every single entry in the
> dirstate. On repos with hundred of thousand of files, this results in
> minutes
> of lookup time instead nothing.
>

On what command?


>
> This is a text book example of why we should test 'is None' if this is
> what we
> mean.
>
> diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
> --- a/mercurial/dirstate.py
> +++ b/mercurial/dirstate.py
> @@ -570,11 +570,12 @@ class dirstate(object):
>          self._pl = [nullid, nullid]
>          self._lastnormaltime = 0
>          self._dirty = True
>
>      def rebuild(self, parent, allfiles, changedfiles=None):
> -        changedfiles = changedfiles or allfiles
> +        if changedfiles is None:
> +            changedfiles = allfiles
>          oldmap = self._map
>          self.clear()
>          for f in allfiles:
>              if f not in changedfiles:
>                  self._map[f] = oldmap[f]
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20150605/b273b17a/attachment.html>


More information about the Mercurial-devel mailing list