mercurial/revset.py
changeset 20427 4a9191ca848e
parent 20424 1da346bad3d8
child 20428 2e33cda452f6
--- a/mercurial/revset.py	Sun Feb 09 00:26:01 2014 +0100
+++ b/mercurial/revset.py	Thu Feb 06 14:19:40 2014 -0800
@@ -2072,5 +2072,23 @@
         l = [r for r in x if r not in s]
         return baseset(list(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
+    revset
+    """
+    def __init__(self, subset, condition):
+        self._subset = subset
+        self._condition = condition
+
+    def __contains__(self, x):
+        return x in self._subset and self._condition(x)
+
+    def __iter__(self):
+        cond = self._condition
+        for x in self._subset:
+            if cond(x):
+                yield x
+
 # tell hggettext to extract docstrings from these functions:
 i18nfunctions = symbols.values()