Mercurial > hg
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':