# HG changeset patch # User Elmar Bartel # Date 1588252205 -7200 # Node ID e58422afbc74c4a2f41929705c9ecc3936b0c4a8 # Parent a467416c493c3ab32f214b69b5d5831da24e5732 diff: re-establish linear runtime performance The previous method with sum() and list() creates a new list object for every hunk. Then sum() is used to flatten out this sequence of lists. The sum() function is not "lazy", but creates a new list object for every "+" operation and so this code had quadratic runtime behaviour. diff -r a467416c493c -r e58422afbc74 mercurial/patch.py --- a/mercurial/patch.py Thu Apr 23 09:59:38 2020 +0200 +++ b/mercurial/patch.py Thu Apr 30 15:10:05 2020 +0200 @@ -2558,7 +2558,7 @@ fctx2 is not None ), b'fctx2 unexpectly None in diff hunks filtering' hunks = hunksfilterfn(fctx2, hunks) - text = b''.join(sum((list(hlines) for hrange, hlines in hunks), [])) + text = b''.join(b''.join(hlines) for hrange, hlines in hunks) if hdr and (text or len(hdr) > 1): yield b'\n'.join(hdr) + b'\n' if text: