[PATCH 2 of 4] revset: added filter method to revset classes

Lucas Moscovicz lmoscovicz at fb.com
Thu Feb 27 17:54:10 CST 2014


# HG changeset patch
# User Lucas Moscovicz <lmoscovicz at fb.com>
# Date 1391735891 28800
#      Thu Feb 06 17:18:11 2014 -0800
# Node ID 4a4a5e8fead9b0689acd3dfcb19878e6fe290d54
# Parent  8ed224ecdf558b57481b5d21cd9d4944f70dec0f
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.

diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -2146,6 +2146,9 @@
         l = [r for r in x if r not in s]
         return baseset(list(self) + l)
 
+    def filter(self, l):
+        return lazyset(self, l)
+
 class lazyset(object):
     """Duck type for baseset class which iterates lazily over the revisions in
     the subset and contains a function which tests for membership in the
@@ -2204,6 +2207,9 @@
     def set(self):
         return set([r for r in self])
 
+    def filter(self, l):
+        return lazyset(self, l)
+
 class orderedlazyset(lazyset):
     """Subclass of lazyset which subset can be ordered either ascending or
     descendingly
@@ -2212,6 +2218,9 @@
         super(orderedlazyset, self).__init__(subset, condition)
         self._ascending = ascending
 
+    def filter(self, l):
+        return orderedlazyset(self, l, ascending=self._ascending)
+
 class generatorset(object):
     """Wrapper structure for generators that provides lazy membership and can
     be iterated more than once.
@@ -2345,5 +2354,11 @@
     def set(self):
         return self
 
+    def filter(self, l):
+        if self._start <= self._end:
+            return orderedlazyset(self, l)
+        else:
+            return orderedlazyset(self, l, ascending=False)
+
 # tell hggettext to extract docstrings from these functions:
 i18nfunctions = symbols.values()


More information about the Mercurial-devel mailing list