# HG changeset patch # User Lucas Moscovicz # Date 1391015043 28800 # Node ID abb91b74f75872f0345b5b333a975d2bc7e92612 # Parent d258486604f4c4be20a6ac1ecca1309cf3883cf2 revset: added lazyset implementation to keyword revset Performance benchmarking: $ time hg log -qr "first(keyword(changeset))" 0:9117c6561b0b real 0m3.466s user 0m3.345s sys 0m0.072s $ time ./hg log -qr "first(keyword(changeset))" 0:9117c6561b0b real 0m0.365s user 0m0.199s sys 0m0.083s diff -r d258486604f4 -r abb91b74f758 mercurial/revset.py --- a/mercurial/revset.py Tue Jan 28 16:19:30 2014 -0800 +++ b/mercurial/revset.py Wed Jan 29 09:04:03 2014 -0800 @@ -921,13 +921,13 @@ """ # i18n: "keyword" is a keyword kw = encoding.lower(getstring(x, _("keyword requires a string"))) - l = [] - for r in subset: + + def matches(r): c = repo[r] - if util.any(kw in encoding.lower(t) - for t in c.files() + [c.user(), c.description()]): - l.append(r) - return baseset(l) + return util.any(kw in encoding.lower(t) for t in c.files() + [c.user(), + c.description()]) + + return lazyset(subset, matches) def limit(repo, subset, x): """``limit(set, [n])``