From c27606d6ba5ce5eba95d43131f72ecc91625cc69 Mon Sep 17 00:00:00 2001 From: Lucas Moscovicz Date: Tue, 4 Feb 2014 09:14:45 -0800 Subject: [PATCH] revset: added lazyset implementation to matching revset Performance Benchmarking: $ time hg log -qr "first(matching(0))" 0:3a6a38229d41 real 0m2.213s user 0m2.149s sys 0m0.055s $ time ./hg log -qr "first(matching(0))" 0:3a6a38229d41 real 0m0.177s user 0m0.137s sys 0m0.038s --- mercurial/revset.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mercurial/revset.py b/mercurial/revset.py index 1afb5d1aec..011a7200c5 100644 --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -1365,18 +1365,18 @@ def matching(repo, subset, x): # is only one field to match) getinfo = lambda r: [f(r) for f in getfieldfuncs] - matches = set() - for rev in revs: - target = getinfo(rev) - for r in subset: + def matches(x): + for rev in revs: + target = getinfo(rev) match = True for n, f in enumerate(getfieldfuncs): - if target[n] != f(r): + if target[n] != f(x): match = False - break if match: - matches.add(r) - return baseset([r for r in subset if r in matches]) + return True + return False + + return lazyset(subset, matches) def reverse(repo, subset, x): """``reverse(set)``