diff -r 2c6a05b938d8 -r e34cd85dc5b1 mercurial/revset.py --- a/mercurial/revset.py Sun Jun 26 18:17:12 2016 +0900 +++ b/mercurial/revset.py Sun Jun 26 18:41:28 2016 +0900 @@ -2253,9 +2253,7 @@ return baseset([node.wdirrev]) return baseset() -# for internal use -@predicate('_list', safe=True) -def _list(repo, subset, x): +def _orderedlist(repo, subset, x): s = getstring(x, "internal error") if not s: return baseset() @@ -2284,8 +2282,15 @@ return baseset(ls) # for internal use -@predicate('_intlist', safe=True) -def _intlist(repo, subset, x): +@predicate('_list', safe=True, takeorder=True) +def _list(repo, subset, x, order): + if order == followorder: + # slow path to take the subset order + return subset & _orderedlist(repo, fullreposet(repo), x) + else: + return _orderedlist(repo, subset, x) + +def _orderedintlist(repo, subset, x): s = getstring(x, "internal error") if not s: return baseset() @@ -2294,8 +2299,15 @@ return baseset([r for r in ls if r in s]) # for internal use -@predicate('_hexlist', safe=True) -def _hexlist(repo, subset, x): +@predicate('_intlist', safe=True, takeorder=True) +def _intlist(repo, subset, x, order): + if order == followorder: + # slow path to take the subset order + return subset & _orderedintlist(repo, fullreposet(repo), x) + else: + return _orderedintlist(repo, subset, x) + +def _orderedhexlist(repo, subset, x): s = getstring(x, "internal error") if not s: return baseset() @@ -2304,6 +2316,15 @@ s = subset return baseset([r for r in ls if r in s]) +# for internal use +@predicate('_hexlist', safe=True, takeorder=True) +def _hexlist(repo, subset, x, order): + if order == followorder: + # slow path to take the subset order + return subset & _orderedhexlist(repo, fullreposet(repo), x) + else: + return _orderedhexlist(repo, subset, x) + methods = { "range": rangeset, "dagrange": dagrange,