comparison 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
comparison
equal deleted inserted replaced
38478:b2d5ad03f31a 38479:72621094505f
1127 cl = repo.changelog 1127 cl = repo.changelog
1128 for ls in repo.branchmap().itervalues(): 1128 for ls in repo.branchmap().itervalues():
1129 hs.update(cl.rev(h) for h in ls) 1129 hs.update(cl.rev(h) for h in ls)
1130 return subset & baseset(hs) 1130 return subset & baseset(hs)
1131 1131
1132 @predicate('heads(set)', safe=True) 1132 @predicate('heads(set)', safe=True, takeorder=True)
1133 def heads(repo, subset, x): 1133 def heads(repo, subset, x, order):
1134 """Members of set with no children in set. 1134 """Members of set with no children in set.
1135 """ 1135 """
1136 s = getset(repo, subset, x) 1136 # argument set should never define order
1137 if order == defineorder:
1138 order = followorder
1139 s = getset(repo, subset, x, order=order)
1137 ps = parents(repo, subset, x) 1140 ps = parents(repo, subset, x)
1138 return s - ps 1141 return s - ps
1139 1142
1140 @predicate('hidden()', safe=True) 1143 @predicate('hidden()', safe=True)
1141 def hidden(repo, subset, x): 1144 def hidden(repo, subset, x):