[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