--- a/mercurial/revset.py Tue Mar 25 23:07:52 2014 +0100
+++ b/mercurial/revset.py Tue Mar 25 16:10:07 2014 -0700
@@ -2624,10 +2624,8 @@
gen: a generator producing the values for the generatorset.
"""
self._gen = gen
- self._iter = iter(gen)
self._cache = {}
self._genlist = baseset([])
- self._iterated = False
self._finished = False
def __contains__(self, x):
@@ -2639,28 +2637,30 @@
if l == x:
return True
- self._finished = True
self._cache[x] = False
return False
def __iter__(self):
- if self._iterated:
- # At least a part of the list should be cached if iteration has
- # started over the generatorset.
- for l in self._genlist:
- yield l
-
- for item in self._consumegen():
- yield item
+ if self._finished:
+ for x in self._genlist:
+ yield x
+ return
+
+ i = 0
+ genlist = self._genlist
+ consume = self._consumegen()
+ while True:
+ if i < len(genlist):
+ yield genlist[i]
+ else:
+ yield consume.next()
+ i += 1
def _consumegen(self):
- self._iterated = True
-
for item in self._gen:
self._cache[item] = True
self._genlist.append(item)
yield item
-
self._finished = True
def set(self):