changeset 46100:a771ffc378a8

simplemerge: write output only once it's complete `simplemerge()` can write either to `ui.fout` or to the file context (for in-memory merge). This patch simplifies the code a bit by making it build the output the same way regardless of where it's written, and then writes the whole output at once. I don't think it will be a problem that we don't output anything until the whole file is merged even if the file is large. Differential Revision: https://phab.mercurial-scm.org/D9550
author Martin von Zweigbergk <martinvonz@google.com>
date Wed, 09 Dec 2020 00:00:19 -0800
parents fd75e5c53ec3
children 49b6910217f9
files mercurial/simplemerge.py
diffstat 1 files changed, 6 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/simplemerge.py	Tue Dec 08 23:05:53 2020 -0800
+++ b/mercurial/simplemerge.py	Wed Dec 09 00:00:19 2020 -0800
@@ -499,14 +499,9 @@
         extrakwargs[b'name_base'] = name_base
         extrakwargs[b'minimize'] = False
 
-    lines = []
-    for line in m3.merge_lines(
+    lines = m3.merge_lines(
         name_a=name_a, name_b=name_b, **pycompat.strkwargs(extrakwargs)
-    ):
-        if opts.get('print'):
-            ui.fout.write(line)
-        else:
-            lines.append(line)
+    )
 
     # merge flags if necessary
     flags = localctx.flags()
@@ -518,8 +513,10 @@
         addedflags = (localflags ^ otherflags) - baseflags
         flags = b''.join(sorted(commonflags | addedflags))
 
-    if not opts.get('print'):
-        mergedtext = b''.join(lines)
+    mergedtext = b''.join(lines)
+    if opts.get('print'):
+        ui.fout.write(mergedtext)
+    else:
         localctx.write(mergedtext, flags)
 
     if m3.conflicts and not mode == b'union':