mercurial/revset.py
changeset 20534 4849f574aa24
parent 20527 bde426f18e0a
child 20536 532b114a6e02
--- a/mercurial/revset.py	Wed Feb 19 16:46:47 2014 -0600
+++ b/mercurial/revset.py	Wed Feb 19 12:56:41 2014 -0800
@@ -972,8 +972,18 @@
         # i18n: "last" is a keyword
         raise error.ParseError(_("last expects a number"))
     ss = subset.set()
-    os = getset(repo, spanset(repo), l[0])[-lim:]
-    return baseset([r for r in os if r in ss])
+    os = getset(repo, spanset(repo), l[0])
+    os.reverse()
+    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 maxrev(repo, subset, x):
     """``max(set)``