From patchwork Tue Feb 11 20:55:19 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [4,of,8] revset: added lazyset implementation to desc revset From: Lucas Moscovicz X-Patchwork-Id: 3578 Message-Id: <336524e10809d7898100.1392152119@dev1037.prn2.facebook.com> To: mercurial-devel@selenic.com Date: Tue, 11 Feb 2014 12:55:19 -0800 # HG changeset patch # User Lucas Moscovicz # Date 1391125196 28800 # Thu Jan 30 15:39:56 2014 -0800 # Node ID 336524e10809d78981001dda5465295b7d312109 # Parent 59c42d99bcfdd22636b43dd6beced0e194bf8bf8 revset: added lazyset implementation to desc revset Performance benchmarking: $ time hg log -qr "first(desc(hg))" changeset: 0:9117c6561b0b real 0m2.210s user 0m2.158s sys 0m0.049s $ time ./hg log -qr "first(desc(hg))" changeset: 0:9117c6561b0b real 0m0.171s user 0m0.131s sys 0m0.035s diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -590,12 +590,12 @@ """ # i18n: "desc" is a keyword ds = encoding.lower(getstring(x, _("desc requires a string"))) - l = [] - for r in subset: - c = repo[r] - if ds in encoding.lower(c.description()): - l.append(r) - return baseset(l) + + def matches(x): + c = repo[x] + return ds in encoding.lower(c.description()) + + return lazyset(subset, matches) def _descendants(repo, subset, x, followfirst=False): args = getset(repo, baseset(repo), x)