[PATCH 5 of 5 🍦] revset-matching: call `getset` on a `fullreposet`

Augie Fackler raf at durin42.com
Mon Nov 3 21:11:24 CST 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