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.
--- a/mercurial/smartset.py Tue Jun 20 23:23:45 2017 -0400
+++ b/mercurial/smartset.py Tue Jun 20 14:00:41 2017 -0700
@@ -871,7 +871,10 @@
if i < _len(genlist):
yield genlist[i]
else:
- yield _next(nextgen)
+ try:
+ yield _next(nextgen)
+ except StopIteration:
+ return
i += 1
return gen()