diff mercurial/revset.py @ 38479:72621094505f

revset: fix heads() order to always follow the input set (BC) An argument expression should never affect the order of the result set. That's the rule of the revset predicates.
author Yuya Nishihara <yuya@tcha.org>
date Wed, 27 Jun 2018 23:39:41 +0900
parents f1d55ae2c5c8
children b23ef2f06d98
line wrap: on
line diff
--- a/mercurial/revset.py	Wed Jun 27 23:33:57 2018 +0900
+++ b/mercurial/revset.py	Wed Jun 27 23:39:41 2018 +0900
@@ -1129,11 +1129,14 @@
         hs.update(cl.rev(h) for h in ls)
     return subset & baseset(hs)
 
-@predicate('heads(set)', safe=True)
-def heads(repo, subset, x):
+@predicate('heads(set)', safe=True, takeorder=True)
+def heads(repo, subset, x, order):
     """Members of set with no children in set.
     """
-    s = getset(repo, subset, x)
+    # argument set should never define order
+    if order == defineorder:
+        order = followorder
+    s = getset(repo, subset, x, order=order)
     ps = parents(repo, subset, x)
     return s - ps