diff mercurial/simplemerge.py @ 46099:fd75e5c53ec3

simplemerge: avoid quadratic concatenation when building output text I haven't checked if the difference is measurable, but the new version is no less readable or idiomatic, so I don't think performance numbers are needed. Differential Revision: https://phab.mercurial-scm.org/D9549
author Martin von Zweigbergk <martinvonz@google.com>
date Tue, 08 Dec 2020 23:05:53 -0800
parents 5510e2ac213f
children a771ffc378a8
line wrap: on
line diff
--- a/mercurial/simplemerge.py	Tue Dec 08 22:59:17 2020 -0800
+++ b/mercurial/simplemerge.py	Tue Dec 08 23:05:53 2020 -0800
@@ -499,14 +499,14 @@
         extrakwargs[b'name_base'] = name_base
         extrakwargs[b'minimize'] = False
 
-    mergedtext = b""
+    lines = []
     for line in m3.merge_lines(
         name_a=name_a, name_b=name_b, **pycompat.strkwargs(extrakwargs)
     ):
         if opts.get('print'):
             ui.fout.write(line)
         else:
-            mergedtext += line
+            lines.append(line)
 
     # merge flags if necessary
     flags = localctx.flags()
@@ -519,6 +519,7 @@
         flags = b''.join(sorted(commonflags | addedflags))
 
     if not opts.get('print'):
+        mergedtext = b''.join(lines)
         localctx.write(mergedtext, flags)
 
     if m3.conflicts and not mode == b'union':