Commit 45750109 authored by Raymond Hettinger's avatar Raymond Hettinger

Issue 21635: Fix caching in difflib.SequenceMatcher.get_matching_blocks().

parent 94919a44
...@@ -523,8 +523,8 @@ class SequenceMatcher: ...@@ -523,8 +523,8 @@ class SequenceMatcher:
non_adjacent.append((i1, j1, k1)) non_adjacent.append((i1, j1, k1))
non_adjacent.append( (la, lb, 0) ) non_adjacent.append( (la, lb, 0) )
self.matching_blocks = non_adjacent self.matching_blocks = map(Match._make, non_adjacent)
return map(Match._make, self.matching_blocks) return self.matching_blocks
def get_opcodes(self): def get_opcodes(self):
"""Return list of 5-tuples describing how to turn a into b. """Return list of 5-tuples describing how to turn a into b.
......
...@@ -59,6 +59,15 @@ class TestSFbugs(unittest.TestCase): ...@@ -59,6 +59,15 @@ class TestSFbugs(unittest.TestCase):
diff_gen = difflib.unified_diff([], []) diff_gen = difflib.unified_diff([], [])
self.assertRaises(StopIteration, diff_gen.next) self.assertRaises(StopIteration, diff_gen.next)
def test_matching_blocks_cache(self):
# Issue #21635
s = difflib.SequenceMatcher(None, "abxcd", "abcd")
first = s.get_matching_blocks()
second = s.get_matching_blocks()
self.assertEqual(second[0].size, 2)
self.assertEqual(second[1].size, 2)
self.assertEqual(second[2].size, 0)
def test_added_tab_hint(self): def test_added_tab_hint(self):
# Check fix for bug #1488943 # Check fix for bug #1488943
diff = list(difflib.Differ().compare(["\tI am a buggy"],["\t\tI am a bug"])) diff = list(difflib.Differ().compare(["\tI am a buggy"],["\t\tI am a bug"]))
......
...@@ -31,6 +31,10 @@ Library ...@@ -31,6 +31,10 @@ Library
- Issue #21491: SocketServer: Fix a race condition in child processes reaping. - Issue #21491: SocketServer: Fix a race condition in child processes reaping.
- Issue #21635: The difflib SequenceMatcher.get_matching_blocks() method
cache didn't match the actual result. The former was a list of tuples
and the latter was a list of named tuples.
- Issue #21722: The distutils "upload" command now exits with a non-zero - Issue #21722: The distutils "upload" command now exits with a non-zero
return code when uploading fails. Patch by Martin Dengler. return code when uploading fails. Patch by Martin Dengler.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment