comparison mercurial/revset.py @ 29945:89dbae952ec1

revset: make reverse() noop depending on ordering requirement (BC) Because smartset.reverse() may modify the underlying subset, it should be called only if the set can define the ordering. In the following example, 'a' and 'c' is the same object, so 'b.reverse()' would reverse 'a' unexpectedly. # '0:2 & reverse(all())' <filteredset <spanset- 0:2>, # a <filteredset # b <spanset- 0:2>, # c <spanset+ 0:9>>>
author Yuya Nishihara <yuya@tcha.org>
date Tue, 03 May 2016 13:36:12 +0900
parents 5f56a3b9675e
children 285a8c3e53f2
comparison
equal deleted inserted replaced
29944:5f56a3b9675e 29945:89dbae952ec1
1831 return True 1831 return True
1832 return False 1832 return False
1833 1833
1834 return subset.filter(matches, condrepr=('<matching%r %r>', fields, revs)) 1834 return subset.filter(matches, condrepr=('<matching%r %r>', fields, revs))
1835 1835
1836 @predicate('reverse(set)', safe=True) 1836 @predicate('reverse(set)', safe=True, takeorder=True)
1837 def reverse(repo, subset, x): 1837 def reverse(repo, subset, x, order):
1838 """Reverse order of set. 1838 """Reverse order of set.
1839 """ 1839 """
1840 l = getset(repo, subset, x) 1840 l = getset(repo, subset, x)
1841 l.reverse() 1841 if order == defineorder:
1842 l.reverse()
1842 return l 1843 return l
1843 1844
1844 @predicate('roots(set)', safe=True) 1845 @predicate('roots(set)', safe=True)
1845 def roots(repo, subset, x): 1846 def roots(repo, subset, x):
1846 """Changesets in set with no parent changeset in set. 1847 """Changesets in set with no parent changeset in set.