From patchwork Wed Dec 9 09:28:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D9549: simplemerge: avoid quadratic concatenation when building output text From: phabricator X-Patchwork-Id: 47846 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Wed, 9 Dec 2020 09:28:42 +0000 martinvonz created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY 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. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D9549 AFFECTED FILES mercurial/simplemerge.py CHANGE DETAILS To: martinvonz, #hg-reviewers Cc: mercurial-patches, mercurial-devel diff --git a/mercurial/simplemerge.py b/mercurial/simplemerge.py --- a/mercurial/simplemerge.py +++ b/mercurial/simplemerge.py @@ -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':