Mercurial > public > mercurial-scm > hg
comparison mercurial/smartset.py @ 32977:27ba0d8dc26c
py3: catch StopIteration from next() in generatorset
IIUC, letting the StopIteration through would not cause any bugs, but
not doing it makes the test-py3-commands.t pass.
I have also diligently gone through all uses of next() in our code
base. They either:
* are not called from a generator
* pass a default value to next()
* catch StopException
* work on infinite iterators
* request a fixed number of items that matches the generated number
* are about batching in wireproto which I didn't quite follow
I'd appreciate if Augie or someone else could take a look at the
wireproto batching and convince themselves that the next(batchable)
calls there will not raise a StopIteration.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 20 Jun 2017 14:00:41 -0700 |
parents | 9b7d615108d7 |
children | 6d767d62b25e |
comparison
equal
deleted
inserted
replaced
32976:d39639fb840e | 32977:27ba0d8dc26c |
---|---|
869 i = 0 | 869 i = 0 |
870 while True: | 870 while True: |
871 if i < _len(genlist): | 871 if i < _len(genlist): |
872 yield genlist[i] | 872 yield genlist[i] |
873 else: | 873 else: |
874 yield _next(nextgen) | 874 try: |
875 yield _next(nextgen) | |
876 except StopIteration: | |
877 return | |
875 i += 1 | 878 i += 1 |
876 return gen() | 879 return gen() |
877 | 880 |
878 def _consumegen(self): | 881 def _consumegen(self): |
879 cache = self._cache | 882 cache = self._cache |