mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
revset: added order methods to lazyset classes
This will allow revsets to ask for an ordered set when possible to be able to work lazily with it.
This commit is contained in:
parent
492c3a2ebf
commit
9ade74466e
@ -2146,6 +2146,12 @@ class baseset(list):
|
||||
super(baseset, self).__init__(data)
|
||||
self._set = None
|
||||
|
||||
def ascending(self):
|
||||
self.sort()
|
||||
|
||||
def descending(self):
|
||||
self.sort(reverse=True)
|
||||
|
||||
def set(self):
|
||||
if not self._set:
|
||||
self._set = set(self)
|
||||
@ -2181,6 +2187,12 @@ class lazyset(object):
|
||||
self._condition = condition
|
||||
self._cache = {}
|
||||
|
||||
def ascending(self):
|
||||
self._subset.sort()
|
||||
|
||||
def descending(self):
|
||||
self._subset.sort(reverse=True)
|
||||
|
||||
def __contains__(self, x):
|
||||
c = self._cache
|
||||
if x not in c:
|
||||
@ -2249,6 +2261,14 @@ class orderedlazyset(lazyset):
|
||||
def filter(self, l):
|
||||
return orderedlazyset(self, l, ascending=self._ascending)
|
||||
|
||||
def ascending(self):
|
||||
if not self._ascending:
|
||||
self.reverse()
|
||||
|
||||
def descending(self):
|
||||
if self._ascending:
|
||||
self.reverse()
|
||||
|
||||
def __and__(self, x):
|
||||
return orderedlazyset(self, lambda r: r in x,
|
||||
ascending=self._ascending)
|
||||
@ -2257,6 +2277,10 @@ class orderedlazyset(lazyset):
|
||||
return orderedlazyset(self, lambda r: r not in x,
|
||||
ascending=self._ascending)
|
||||
|
||||
def reverse(self):
|
||||
self._subset.reverse()
|
||||
self._ascending = not self._ascending
|
||||
|
||||
class generatorset(object):
|
||||
"""Wrapper structure for generators that provides lazy membership and can
|
||||
be iterated more than once.
|
||||
@ -2342,6 +2366,14 @@ class spanset(object):
|
||||
self._end = len(repo)
|
||||
self._hiddenrevs = repo.changelog.filteredrevs
|
||||
|
||||
def ascending(self):
|
||||
if self._start > self._end:
|
||||
self.reverse()
|
||||
|
||||
def descending(self):
|
||||
if self._start < self._end:
|
||||
self.reverse()
|
||||
|
||||
def _contained(self, rev):
|
||||
return (rev <= self._start and rev > self._end) or (rev >= self._start
|
||||
and rev < self._end)
|
||||
|
Loading…
Reference in New Issue
Block a user