diff: re-establish linear runtime performance stable
authorElmar Bartel <elb_hg@leo.org>
Thu, 30 Apr 2020 15:10:05 +0200
branchstable
changeset 44744 e58422afbc74
parent 44743 a467416c493c
child 44745 6a6c15cea1fa
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.
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: