revset: added lazyset implementation to keyword revset
authorLucas Moscovicz <lmoscovicz@fb.com>
Wed, 29 Jan 2014 09:04:03 -0800
changeset 20447 abb91b74f758
parent 20446 d258486604f4
child 20448 92f6f2db3cf4
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
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])``