# HG changeset patch # User Bryan O'Sullivan # Date 1353434946 28800 # Node ID 49c85541617baff9fea11ae3af55dee15bde2573 # Parent a1f94e2f5da2dee4e107eab035685285d9923999# Parent 54cedee86e5126188b0dcfbd7015bcdca7f6c2e2 Merge with crew-stable diff -r a1f94e2f5da2 -r 49c85541617b mercurial/changelog.py --- a/mercurial/changelog.py Fri Nov 16 10:20:32 2012 -0600 +++ b/mercurial/changelog.py Tue Nov 20 10:09:06 2012 -0800 @@ -134,9 +134,15 @@ def __iter__(self): """filtered version of revlog.__iter__""" - for i in xrange(len(self)): - if i not in self.filteredrevs: - yield i + if len(self.filteredrevs) == 0: + return revlog.revlog.__iter__(self) + + def filterediter(): + for i in xrange(len(self)): + if i not in self.filteredrevs: + yield i + + return filterediter() def revs(self, start=0, stop=None): """filtered version of revlog.revs""" diff -r a1f94e2f5da2 -r 49c85541617b mercurial/revlog.py --- a/mercurial/revlog.py Fri Nov 16 10:20:32 2012 -0600 +++ b/mercurial/revlog.py Tue Nov 20 10:09:06 2012 -0800 @@ -254,8 +254,7 @@ def __len__(self): return len(self.index) - 1 def __iter__(self): - for i in xrange(len(self)): - yield i + return iter(xrange(len(self))) def revs(self, start=0, stop=None): """iterate over all rev in this revlog (from start to stop)""" if stop is None: diff -r a1f94e2f5da2 -r 49c85541617b mercurial/revset.py --- a/mercurial/revset.py Fri Nov 16 10:20:32 2012 -0600 +++ b/mercurial/revset.py Tue Nov 20 10:09:06 2012 -0800 @@ -584,6 +584,14 @@ if not args: return [] s = set(_revdescendants(repo, args, followfirst)) | set(args) + + if len(subset) == len(repo): + # the passed in revisions may not exist, -1 for example + for arg in args: + if arg not in subset: + s.remove(arg) + return list(s) + return [r for r in subset if r in s] def descendants(repo, subset, x): @@ -1341,7 +1349,10 @@ Changesets in set with no parent changeset in set. """ s = set(getset(repo, repo.changelog, x)) - subset = [r for r in subset if r in s] + if len(subset) == len(repo): + subset = s + else: + subset = [r for r in subset if r in s] cs = _children(repo, subset, s) return [r for r in subset if r not in cs]