Mercurial > public > mercurial-scm > hg
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) |