comparison mercurial/revset.py @ 20725:cf628b50afbb

revset: added isascending and isdescending methods to smartset classes This methods state if the class is sorted in an ascending or descending order We need this to implement methods based on order on smartset classes in order to be able to create new objects with a given order. We cannot just rely on a simple boolean since unordered set are neither ascending nor descending.
author Lucas Moscovicz <lmoscovicz@fb.com>
date Tue, 11 Mar 2014 17:09:23 -0700
parents e9a64b3f2925
children 6eb9c4a9a12b
comparison
equal deleted inserted replaced
20724:e9a64b3f2925 20725:cf628b50afbb
2202 def __add__(self, x): 2202 def __add__(self, x):
2203 s = self.set() 2203 s = self.set()
2204 l = [r for r in x if r not in s] 2204 l = [r for r in x if r not in s]
2205 return baseset(list(self) + l) 2205 return baseset(list(self) + l)
2206 2206
2207 def isascending(self):
2208 return False
2209
2210 def isdescending(self):
2211 return False
2212
2207 def filter(self, l): 2213 def filter(self, l):
2208 return lazyset(self, l) 2214 return lazyset(self, l)
2209 2215
2210 class lazyset(object): 2216 class lazyset(object):
2211 """Duck type for baseset class which iterates lazily over the revisions in 2217 """Duck type for baseset class which iterates lazily over the revisions in
2267 def reverse(self): 2273 def reverse(self):
2268 self._subset.reverse() 2274 self._subset.reverse()
2269 2275
2270 def set(self): 2276 def set(self):
2271 return set([r for r in self]) 2277 return set([r for r in self])
2278
2279 def isascending(self):
2280 return False
2281
2282 def isdescending(self):
2283 return False
2272 2284
2273 def filter(self, l): 2285 def filter(self, l):
2274 return lazyset(self, l) 2286 return lazyset(self, l)
2275 2287
2276 class orderedlazyset(lazyset): 2288 class orderedlazyset(lazyset):
2306 self._subset.sort(reverse=reverse) 2318 self._subset.sort(reverse=reverse)
2307 else: 2319 else:
2308 if not self._ascending: 2320 if not self._ascending:
2309 self._subset.sort(reverse=reverse) 2321 self._subset.sort(reverse=reverse)
2310 self._ascending = not reverse 2322 self._ascending = not reverse
2323
2324 def isascending(self):
2325 return self._ascending
2326
2327 def isdescending(self):
2328 return not self._ascending
2311 2329
2312 def reverse(self): 2330 def reverse(self):
2313 self._subset.reverse() 2331 self._subset.reverse()
2314 self._ascending = not self._ascending 2332 self._ascending = not self._ascending
2315 2333
2619 self._start, self._end = self._end + 1, self._start + 1 2637 self._start, self._end = self._end + 1, self._start + 1
2620 2638
2621 def set(self): 2639 def set(self):
2622 return self 2640 return self
2623 2641
2642 def isascending(self):
2643 return self._start < self._end
2644
2645 def isdescending(self):
2646 return self._start > self._end
2647
2624 def filter(self, l): 2648 def filter(self, l):
2625 if self._start <= self._end: 2649 if self._start <= self._end:
2626 return orderedlazyset(self, l) 2650 return orderedlazyset(self, l)
2627 else: 2651 else:
2628 return orderedlazyset(self, l, ascending=False) 2652 return orderedlazyset(self, l, ascending=False)