# HG changeset patch # User Martin von Zweigbergk # Date 1497992441 25200 # Node ID 27ba0d8dc26cac137430618f327969cb83c4d9f4 # Parent d39639fb840e110b54faecb33258efe7513f69be 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. diff -r d39639fb840e -r 27ba0d8dc26c mercurial/smartset.py --- 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()