comparison mercurial/revset.py @ 20610:34bb07e70c68

revset: added filter method to revset classes This method will replace the creation of lazysets inside the revset methods. Instead, the classes that handle lazy structures will create them based on their current order.
author Lucas Moscovicz <lmoscovicz@fb.com>
date Thu, 06 Feb 2014 17:18:11 -0800
parents 56ecc82fcd67
children 6490f8385391
comparison
equal deleted inserted replaced
20609:56ecc82fcd67 20610:34bb07e70c68
2144 def __add__(self, x): 2144 def __add__(self, x):
2145 s = self.set() 2145 s = self.set()
2146 l = [r for r in x if r not in s] 2146 l = [r for r in x if r not in s]
2147 return baseset(list(self) + l) 2147 return baseset(list(self) + l)
2148 2148
2149 def filter(self, l):
2150 return lazyset(self, l)
2151
2149 class lazyset(object): 2152 class lazyset(object):
2150 """Duck type for baseset class which iterates lazily over the revisions in 2153 """Duck type for baseset class which iterates lazily over the revisions in
2151 the subset and contains a function which tests for membership in the 2154 the subset and contains a function which tests for membership in the
2152 revset 2155 revset
2153 """ 2156 """
2208 self._subset.reverse() 2211 self._subset.reverse()
2209 2212
2210 def set(self): 2213 def set(self):
2211 return set([r for r in self]) 2214 return set([r for r in self])
2212 2215
2216 def filter(self, l):
2217 return lazyset(self, l)
2218
2213 class orderedlazyset(lazyset): 2219 class orderedlazyset(lazyset):
2214 """Subclass of lazyset which subset can be ordered either ascending or 2220 """Subclass of lazyset which subset can be ordered either ascending or
2215 descendingly 2221 descendingly
2216 """ 2222 """
2217 def __init__(self, subset, condition, ascending=True): 2223 def __init__(self, subset, condition, ascending=True):
2218 super(orderedlazyset, self).__init__(subset, condition) 2224 super(orderedlazyset, self).__init__(subset, condition)
2219 self._ascending = ascending 2225 self._ascending = ascending
2226
2227 def filter(self, l):
2228 return orderedlazyset(self, l, ascending=self._ascending)
2220 2229
2221 class generatorset(object): 2230 class generatorset(object):
2222 """Wrapper structure for generators that provides lazy membership and can 2231 """Wrapper structure for generators that provides lazy membership and can
2223 be iterated more than once. 2232 be iterated more than once.
2224 When asked for membership it generates values until either it finds the 2233 When asked for membership it generates values until either it finds the
2355 self._start, self._end = self._end + 1, self._start + 1 2364 self._start, self._end = self._end + 1, self._start + 1
2356 2365
2357 def set(self): 2366 def set(self):
2358 return self 2367 return self
2359 2368
2369 def filter(self, l):
2370 if self._start <= self._end:
2371 return orderedlazyset(self, l)
2372 else:
2373 return orderedlazyset(self, l, ascending=False)
2374
2360 # tell hggettext to extract docstrings from these functions: 2375 # tell hggettext to extract docstrings from these functions:
2361 i18nfunctions = symbols.values() 2376 i18nfunctions = symbols.values()