revset: leverage orset() to flatten ancestor() arguments
authorYuya Nishihara <yuya@tcha.org>
Sat, 16 Jun 2018 23:21:47 +0900
changeset 38489 626d29c6e987
parent 38488 b23ef2f06d98
child 38490 5d88fd1bc2af
revset: leverage orset() to flatten ancestor() arguments This also makes orset() accept an empty argument because nullary ancestor() call is valid. That's not the case for orset(), but should be okay.
mercurial/revset.py
--- a/mercurial/revset.py	Sat Jun 16 23:12:41 2018 +0900
+++ b/mercurial/revset.py	Sat Jun 16 23:21:47 2018 +0900
@@ -203,6 +203,8 @@
 
 def orset(repo, subset, x, order):
     xs = getlist(x)
+    if not xs:
+        return baseset()
     if order == followorder:
         # slow path to take the subset order
         return subset & _orsetlist(repo, fullreposet(repo), xs, anyorder)
@@ -309,17 +311,12 @@
     Will return empty list when passed no args.
     Greatest common ancestor of a single changeset is that changeset.
     """
-    l = getlist(x)
-    rl = fullreposet(repo)
     anc = None
-
-    # (getset(repo, rl, i) for i in l) generates a list of lists
-    for revs in (getset(repo, rl, i) for i in l):
-        for r in revs:
-            if anc is None:
-                anc = repo[r]
-            else:
-                anc = anc.ancestor(repo[r])
+    for r in orset(repo, fullreposet(repo), x, order=anyorder):
+        if anc is None:
+            anc = repo[r]
+        else:
+            anc = anc.ancestor(repo[r])
 
     if anc is not None and anc.rev() in subset:
         return baseset([anc.rev()])