[PATCH 6 of 7] revset: use filterrevs in more places where it makes sense

Bryan O'Sullivan bos at serpentine.com
Mon Jun 4 17:25:12 CDT 2012


# HG changeset patch
# User Bryan O'Sullivan <bryano at fb.com>
# Date 1338848634 25200
# Node ID f6029089455346072a71c32952853252ff3d3ee7
# Parent  1fda5b47f842b8b57ee866684aaabcc1052a06e1
revset: use filterrevs in more places where it makes sense

diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -304,8 +304,7 @@ def rangeset(repo, subset, x, y):
         r = range(m, n + 1)
     else:
         r = range(m, n - 1, -1)
-    s = revsubset(subset)
-    return [x for x in r if x in s]
+    return filterrevs(r, subset, contig=True)
 
 def dagrange(repo, subset, x, y):
     if subset:
@@ -357,10 +356,8 @@ def ancestor(repo, subset, x):
     if len(a) != 1 or len(b) != 1:
         # i18n: "ancestor" is a keyword
         raise error.ParseError(_("ancestor arguments must be single revisions"))
-    an = [repo[a[0]].ancestor(repo[b[0]]).rev()]
 
-    s = revsubset(subset)
-    return [r for r in an if r in s]
+    return filterrevs([repo[a[0]].ancestor(repo[b[0]]).rev()], subset)
 
 def _ancestors(repo, subset, x, followfirst=False):
     args = getset(repo, revsubset(repo), x)
@@ -419,8 +416,7 @@ def bisect(repo, subset, x):
     - ``current``            : the cset currently being bisected
     """
     status = getstring(x, _("bisect requires a string")).lower()
-    state = set(hbisect.get(repo, status))
-    return [r for r in subset if r in state]
+    return filterrevs(subset, hbisect.get(repo, status))
 
 # Backward-compatibility
 # - no help entry so that we do not advertise it any more
@@ -851,9 +847,7 @@ def limit(repo, subset, x):
     except (TypeError, ValueError):
         # i18n: "limit" is a keyword
         raise error.ParseError(_("limit expects a number"))
-    ss = revsubset(subset)
-    os = getset(repo, revsubset(repo), l[0])[:lim]
-    return [r for r in os if r in ss]
+    return filterrevs(getset(repo, revsubset(repo), l[0])[:lim], subset)
 
 def last(repo, subset, x):
     """``last(set, [n])``
@@ -869,9 +863,7 @@ def last(repo, subset, x):
     except (TypeError, ValueError):
         # i18n: "last" is a keyword
         raise error.ParseError(_("last expects a number"))
-    ss = revsubset(subset)
-    os = getset(repo, revsubset(repo), l[0])[-lim:]
-    return [r for r in os if r in ss]
+    return filterrevs(getset(repo, revsubset(repo), l[0])[-lim:], subset)
 
 def maxrev(repo, subset, x):
     """``max(set)``
@@ -949,9 +941,7 @@ def outgoing(repo, subset, x):
     repo.ui.pushbuffer()
     outgoing = discovery.findcommonoutgoing(repo, other, onlyheads=revs)
     repo.ui.popbuffer()
-    cl = repo.changelog
-    o = set([cl.rev(r) for r in outgoing.missing])
-    return [r for r in subset if r in o]
+    return filterrevs(subset, map(repo.changelog.rev, outgoing.missing))
 
 def p1(repo, subset, x):
     """``p1([set])``
@@ -1369,9 +1359,7 @@ def _list(repo, subset, x):
     s = getstring(x, "internal error")
     if not s:
         return []
-    subset = revsubset(subset)
-    ls = [repo[r].rev() for r in s.split('\0')]
-    return [r for r in ls if r in subset]
+    return filterrevs([repo[r].rev() for r in s.split('\0')], subset)
 
 symbols = {
     "adds": adds,


More information about the Mercurial-devel mailing list