# HG changeset patch # User Pierre-Yves David # Date 2015-06-22 20:48:01 # Node ID 9b9877d2b2291391f5d882d1727c5f1afebdaf1e # Parent 46a96dd4d976bc0803d2cb0bf162469f46c1b26c revset: rework 'filteredset.last' 'isascending' and 'isdescending' are methods, not attributes. This led 'last()' to misbehave on some non-ascending filtered sets. diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -3028,16 +3028,19 @@ class filteredset(abstractsmartset): def last(self): it = None - if self._subset.isascending: - it = self.fastdesc - elif self._subset.isdescending: + if self.isascending(): it = self.fastdesc - if it is None: - # slowly consume everything. This needs improvement - it = lambda: reversed(list(self)) - for x in it(): + elif self.isdescending(): + it = self.fastasc + if it is not None: + for x in it(): + return x + return None #empty case + else: + x = None + for x in self: + pass return x - return None def __repr__(self): return '<%s %r>' % (type(self).__name__, self._subset)