bpo-33224: PEP 479 fix for difflib.mdiff() (GH-6381)
This commit is contained in:
parent
7286dbd8b2
commit
01b731fc2b
|
@ -1634,14 +1634,18 @@ def _mdiff(fromlines, tolines, context=None, linejunk=None,
|
|||
lines_to_write -= 1
|
||||
# Now yield the context lines after the change
|
||||
lines_to_write = context-1
|
||||
while(lines_to_write):
|
||||
from_line, to_line, found_diff = next(line_pair_iterator)
|
||||
# If another change within the context, extend the context
|
||||
if found_diff:
|
||||
lines_to_write = context-1
|
||||
else:
|
||||
lines_to_write -= 1
|
||||
yield from_line, to_line, found_diff
|
||||
try:
|
||||
while(lines_to_write):
|
||||
from_line, to_line, found_diff = next(line_pair_iterator)
|
||||
# If another change within the context, extend the context
|
||||
if found_diff:
|
||||
lines_to_write = context-1
|
||||
else:
|
||||
lines_to_write -= 1
|
||||
yield from_line, to_line, found_diff
|
||||
except StopIteration:
|
||||
# Catch exception from next() and return normally
|
||||
return
|
||||
|
||||
|
||||
_file_template = """
|
||||
|
|
|
@ -93,6 +93,14 @@ class TestSFbugs(unittest.TestCase):
|
|||
self.assertEqual("+ \t\tI am a bug", diff[2])
|
||||
self.assertEqual("? +\n", diff[3])
|
||||
|
||||
def test_mdiff_catch_stop_iteration(self):
|
||||
# Issue #33224
|
||||
self.assertEqual(
|
||||
list(difflib._mdiff(["2"], ["3"], 1)),
|
||||
[((1, '\x00-2\x01'), (1, '\x00+3\x01'), True)],
|
||||
)
|
||||
|
||||
|
||||
patch914575_from1 = """
|
||||
1. Beautiful is beTTer than ugly.
|
||||
2. Explicit is better than implicit.
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Update difflib.mdiff() for PEP 479. Convert an uncaught StopIteration in a
|
||||
generator into a return-statement.
|
Loading…
Reference in New Issue