# HG changeset patch # User Pierre-Yves David # Date 2014-10-07 07:18:08 # Node ID 5a96df266b2b9d74efa0016fd5703e64dccb3fce # Parent fcd12b3101483e8f6418f82f7ef7f32bc411e61d filteredset: implement `first` and `last` diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -2482,6 +2482,25 @@ class filteredset(abstractsmartset): def isdescending(self): return self._ascending is not None and not self._ascending + def first(self): + for x in self: + return x + return None + + def last(self): + it = None + if self._ascending is not None: + if self._ascending: + it = self.fastdesc + else: + it = self.fastasc + if it is None: + # slowly consume everything. This needs improvement + it = lambda: reversed(list(self)) + for x in it(): + return x + return None + class addset(abstractsmartset): """Represent the addition of two sets