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.
--- 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: