# HG changeset patch # User Lucas Moscovicz # Date 1390954770 28800 # Node ID d258486604f4c4be20a6ac1ecca1309cf3883cf2 # Parent 507261c0914f0a663fa6ca06490bdbf5dc0199fc revset: changed limit revset implementation to work with lazy revsets Performance benchmarking: $ time hg log -qr "first(branch(default))" 0:9117c6561b0b real 0m3.130s user 0m3.025s sys 0m0.074s $ time ./hg log -qr "first(branch(default))" 0:9117c6561b0b real 0m0.300s user 0m0.198s sys 0m0.069s diff -r 507261c0914f -r d258486604f4 mercurial/revset.py --- a/mercurial/revset.py Wed Feb 05 16:12:03 2014 -0800 +++ b/mercurial/revset.py Tue Jan 28 16:19:30 2014 -0800 @@ -944,8 +944,17 @@ # i18n: "limit" is a keyword raise error.ParseError(_("limit expects a number")) ss = subset.set() - os = getset(repo, baseset(repo), l[0])[:lim] - return baseset([r for r in os if r in ss]) + os = getset(repo, baseset(repo), l[0]) + bs = baseset([]) + it = iter(os) + for x in xrange(lim): + try: + y = it.next() + if y in ss: + bs.append(y) + except (StopIteration): + break + return bs def last(repo, subset, x): """``last(set, [n])``