diff options
author | Raymond Hettinger <python@rcn.com> | 2014-06-21 11:27:36 -0700 |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2014-06-21 11:27:36 -0700 |
commit | 7f1f10032cfb20d2148ee58d22daab6e58f339a6 (patch) | |
tree | 1377e51c19e53bdc871b3ea6fceb51fc58bb7f62 | |
parent | cb8f65d54dd2209fb0e9df525400ac6479a4f24a (diff) | |
download | cpython-7f1f10032cfb20d2148ee58d22daab6e58f339a6.tar.gz |
Issue 21635: Fix caching in difflib.SequenceMatcher.get_matching_blocks().
-rw-r--r-- | Lib/difflib.py | 4 | ||||
-rw-r--r-- | Lib/test/test_difflib.py | 9 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
3 files changed, 15 insertions, 2 deletions
diff --git a/Lib/difflib.py b/Lib/difflib.py index 5dac1d63ae..3880d8472e 100644 --- a/Lib/difflib.py +++ b/Lib/difflib.py @@ -523,8 +523,8 @@ class SequenceMatcher: non_adjacent.append((i1, j1, k1)) non_adjacent.append( (la, lb, 0) ) - self.matching_blocks = non_adjacent - return map(Match._make, self.matching_blocks) + self.matching_blocks = map(Match._make, non_adjacent) + return self.matching_blocks def get_opcodes(self): """Return list of 5-tuples describing how to turn a into b. diff --git a/Lib/test/test_difflib.py b/Lib/test/test_difflib.py index 310bf99782..35f2c36ca7 100644 --- a/Lib/test/test_difflib.py +++ b/Lib/test/test_difflib.py @@ -59,6 +59,15 @@ class TestSFbugs(unittest.TestCase): diff_gen = difflib.unified_diff([], []) 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): # Check fix for bug #1488943 diff = list(difflib.Differ().compare(["\tI am a buggy"],["\t\tI am a bug"])) @@ -31,6 +31,10 @@ Library - 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 return code when uploading fails. Patch by Martin Dengler. |