[PATCH 3 of 3] revset: speedup matching() by first matching fields that take less time to

Patrick Mézard patrick at mezard.eu
Sat Apr 14 02:12:17 CDT 2012


Le 14/04/12 01:42, Angel Ezquerra a écrit :
> # HG changeset patch
> # User Angel Ezquerra <angel.ezquerra at gmail.com>
> # Date 1334360463 -7200
> # Node ID 4075aa74e8398584a47f20c9b51af7e0d788dbcc
> # Parent  e735d3f86e7f96ebd78ea5080eb8f2db2220e63f
> revset: speedup matching() by first matching fields that take less time to
> match
> 
> This patch sorts the fields that are passed to the matching function so that it
> always starts by matching those fields that take less time to match.
> 
> Not all fields take the same amount of time to match. I've done several
> measurements running the following command:
> 
> hg --time log -r "matching(1, field)"
> 
> on the mercurial repository, and where 'field' was each one of the fields
> accepted by match. In order to avoid the print overhead (which could be
> different for different fields, given the different number of matches) I used a
> modified version of the matching() function which always returns no matches.
> 
> These tests showed that different fields take wildly different amounts of time
> to match. Particulary the substate field takes up to 25 seconds to match on my
> machine, compared to the 0.3 seconds that takes to match the phase field or the
> 2 seconds (approx) that takes to match most fields. With this patch, matching
> both the phase and the substate of a revision takes the same amount of time as
> matching the phase.
> 
> The field match order introduced by this patch is as follows:
> 
> phase, parents, user, date, branch, summary, files, description, substate
> 
> An extra nice thing about this patch is that it makes the match time stable.

Could you add tests in test-revset.t?

--
Patrick Mézard


More information about the Mercurial-devel mailing list