[PATCH 5 of 5 🍦] revset-matching: call `getset` on a `fullreposet`
Augie Fackler
raf at durin42.com
Tue Nov 4 03:11:24 UTC 2014
On Sun, Nov 02, 2014 at 11:46:09AM +0000, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1413526535 25200
> # Thu Oct 16 23:15:35 2014 -0700
> # Node ID 7659e131a038fe4b1ac4b87230c63a7d22a6da5f
> # Parent 029413a414a56691690eb404ccb22d32b16b5800
> revset-matching: call `getset` on a `fullreposet`
Deeerp, mpm already pushed these. Dropping my copies.
>
> Calling `baseset(repo.changelog)` build a list for all revisions in the repo. And
> we already have the lazy and efficient `fullreposet` class for this purpose.
>
> This gives us the usual benefits of the fullreposet but it is less visible
> because the matching process itself is very expensive:
>
> revset) matching(100)
> before) wall 6.413281 comb 6.420000 user 5.910000 sys 0.510000 (best of 3)
> after) wall 6.173608 comb 6.170000 user 5.750000 sys 0.420000 (best of 3)
>
> However for some complex list, this provide a massive speedup
>
> revset) matching(parents(100))
> before) wall 23.890740 comb 23.890000 user 23.450000 sys 0.440000 (best of 3)
> after) wall 6.382280 comb 6.390000 user 5.930000 sys 0.460000 (best of 3)
>
> diff --git a/mercurial/revset.py b/mercurial/revset.py
> --- a/mercurial/revset.py
> +++ b/mercurial/revset.py
> @@ -1381,11 +1381,11 @@ def matching(repo, subset, x):
> specified. You can match more than one field at a time.
> """
> # i18n: "matching" is a keyword
> l = getargs(x, 1, 2, _("matching takes 1 or 2 arguments"))
>
> - revs = getset(repo, baseset(repo.changelog), l[0])
> + revs = getset(repo, fullreposet(repo), l[0])
>
> fieldlist = ['metadata']
> if len(l) > 1:
> fieldlist = getstring(l[1],
> # i18n: "matching" is a keyword
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list