--- 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"""
--- 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:
--- 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]