Mercurial > hg
changeset 20453:6aa7dcae6bd8
revset: added lazyset implementation to grep revset
Performance benchmarking:
$ time hg log -qr "first(grep(hg))"
0:9117c6561b0b
real 0m2.214s
user 0m2.163s
sys 0m0.045s
$ time ./hg log -qr "first(grep(hg))"
0:9117c6561b0b
real 0m0.211s
user 0m0.146s
sys 0m0.035s
author | Lucas Moscovicz <lmoscovicz@fb.com> |
---|---|
date | Thu, 30 Jan 2014 16:03:18 -0800 |
parents | a685d9870eb5 |
children | 47fd57f650e5 |
files | mercurial/revset.py |
diffstat | 1 files changed, 7 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revset.py Thu Jan 30 15:39:56 2014 -0800 +++ b/mercurial/revset.py Thu Jan 30 16:03:18 2014 -0800 @@ -800,14 +800,15 @@ gr = re.compile(getstring(x, _("grep requires a string"))) except re.error, e: raise error.ParseError(_('invalid match pattern: %s') % e) - l = [] - for r in subset: - c = repo[r] + + def matches(x): + c = repo[x] for e in c.files() + [c.user(), c.description()]: if gr.search(e): - l.append(r) - break - return baseset(l) + return True + return False + + return lazyset(subset, matches) def _matchfiles(repo, subset, x): # _matchfiles takes a revset list of prefixed arguments: