mirror of
https://github.com/facebook/sapling.git
synced 2024-10-05 14:28:17 +03:00
simplemerge: simplify and rename render_markers()
Summary: Written by Martin von Zweigbergk at https://phab.mercurial-scm.org/D11979 I did minor compatibility changes. Original commit message: render_markers() now always renders minimized 2-way markers, so let's simplify and rename it accordingly. Reviewed By: quark-zju Differential Revision: D48866237 fbshipit-source-id: 79ca3f4016e0cb3a55f78b10d183b10e90c4bf0e
This commit is contained in:
parent
cc4e3c1ccd
commit
50f0e3cd0d
@ -9,7 +9,7 @@ from typing import List, Optional
|
||||
|
||||
from edenscm import commands, error, mdiff, registrar, scmutil
|
||||
from edenscm.i18n import _
|
||||
from edenscm.simplemerge import Merge3Text, render_markers, wordmergemode
|
||||
from edenscm.simplemerge import Merge3Text, render_minimized, wordmergemode
|
||||
|
||||
cmdtable = {}
|
||||
command = registrar.command(cmdtable)
|
||||
@ -261,7 +261,7 @@ def merge_file(
|
||||
bench_stats.changed_files += 1
|
||||
|
||||
m3 = m3merger(basetext, dsttext, srctext)
|
||||
mergedlines, conflictscount = render_markers(m3)
|
||||
mergedlines, conflictscount = render_minimized(m3)
|
||||
mergedtext = b"".join(mergedlines)
|
||||
|
||||
if conflictscount:
|
||||
@ -274,7 +274,7 @@ def merge_file(
|
||||
|
||||
if m3merger != Merge3Text:
|
||||
m3_baseline = Merge3Text(basetext, dsttext, srctext)
|
||||
mergedtext_baseline = b"".join(render_markers(m3_baseline)[0])
|
||||
mergedtext_baseline = b"".join(render_minimized(m3_baseline)[0])
|
||||
|
||||
if mergedtext != mergedtext_baseline:
|
||||
repo.ui.write(
|
||||
|
@ -316,7 +316,7 @@ def debugbuilddag(
|
||||
pa = p1.ancestor(p2)
|
||||
base, local, other = [x[fn].data() for x in (pa, p1, p2)]
|
||||
m3 = simplemerge.Merge3Text(base, local, other)
|
||||
merged_lines = simplemerge.render_markers(m3)[0]
|
||||
merged_lines = simplemerge.render_minimized(m3)[0]
|
||||
ml = [pycompat.decodeutf8(l.strip()) for l in merged_lines]
|
||||
ml.append("")
|
||||
elif at > 0:
|
||||
|
@ -1031,7 +1031,7 @@ class rebaseruntime:
|
||||
|
||||
|
||||
def _simplemerge(ui, basectx, ctx, p1ctx, manifestbuilder):
|
||||
from ..simplemerge import Merge3Text, render_markers, wordmergemode
|
||||
from ..simplemerge import Merge3Text, render_minimized, wordmergemode
|
||||
|
||||
conflicts = []
|
||||
resolved = {}
|
||||
@ -1043,7 +1043,7 @@ def _simplemerge(ui, basectx, ctx, p1ctx, manifestbuilder):
|
||||
wordmerge = wordmergemode.fromui(ui)
|
||||
m3 = Merge3Text(basetext, localtext, othertext, wordmerge=wordmerge)
|
||||
|
||||
merged_lines, conflictscount = render_markers(m3)
|
||||
merged_lines, conflictscount = render_minimized(m3)
|
||||
merged = b"".join(merged_lines)
|
||||
|
||||
# Suppress message if merged result is the same as local contents.
|
||||
|
@ -89,7 +89,7 @@ def trywordmerge(base_lines, a_lines, b_lines):
|
||||
btext = b"".join(b_lines)
|
||||
try:
|
||||
m3 = Merge3Text(basetext, atext, btext, wordmerge=wordmergemode.enforced)
|
||||
text = b"".join(render_markers(m3)[0])
|
||||
text = b"".join(render_minimized(m3)[0])
|
||||
return text.splitlines(True)
|
||||
except CantShowWordConflicts:
|
||||
return None
|
||||
@ -395,39 +395,34 @@ class Merge3Text:
|
||||
return sl
|
||||
|
||||
|
||||
def render_markers(
|
||||
def render_minimized(
|
||||
m3,
|
||||
name_a=None,
|
||||
name_b=None,
|
||||
start_marker=b"<<<<<<<",
|
||||
mid_marker=b"=======",
|
||||
end_marker=b">>>>>>>",
|
||||
minimize=False,
|
||||
) -> Tuple[List[bytes], int]:
|
||||
"""Return merge in cvs-like form."""
|
||||
conflictscount = 0
|
||||
newline = _detect_newline(m3)
|
||||
if name_a and start_marker:
|
||||
if name_a:
|
||||
start_marker = start_marker + b" " + name_a
|
||||
if name_b and end_marker:
|
||||
if name_b:
|
||||
end_marker = end_marker + b" " + name_b
|
||||
|
||||
merge_groups = m3.merge_groups(automerge=True)
|
||||
if minimize:
|
||||
merge_groups = m3.minimize(merge_groups)
|
||||
merge_groups = m3.minimize(merge_groups)
|
||||
lines = []
|
||||
for what, group_lines in merge_groups:
|
||||
if what == "conflict":
|
||||
conflictscount += 1
|
||||
base_lines, a_lines, b_lines = group_lines
|
||||
if start_marker is not None:
|
||||
lines.append(start_marker + newline)
|
||||
lines.append(start_marker + newline)
|
||||
lines.extend(a_lines)
|
||||
if mid_marker is not None:
|
||||
lines.append(mid_marker + newline)
|
||||
lines.append(mid_marker + newline)
|
||||
lines.extend(b_lines)
|
||||
if end_marker is not None:
|
||||
lines.append(end_marker + newline)
|
||||
lines.append(end_marker + newline)
|
||||
else:
|
||||
lines.extend(group_lines)
|
||||
|
||||
@ -603,10 +598,7 @@ def simplemerge(ui, localctx, basectx, otherctx, **opts):
|
||||
elif mode == "merge3":
|
||||
lines, conflictscount = render_merge3(m3, name_a, name_b, name_base)
|
||||
else:
|
||||
extrakwargs = {"minimize": True}
|
||||
lines, conflictscount = render_markers(
|
||||
m3, name_a=name_a, name_b=name_b, **extrakwargs
|
||||
)
|
||||
lines, conflictscount = render_minimized(m3, name_a, name_b)
|
||||
|
||||
mergedtext = b"".join(lines)
|
||||
if opts.get("print"):
|
||||
|
@ -24,7 +24,7 @@ import unittest
|
||||
|
||||
from edenscm import error, util
|
||||
from edenscm.pycompat import decodeutf8
|
||||
from edenscm.simplemerge import Merge3Text, render_markers, wordmergemode
|
||||
from edenscm.simplemerge import Merge3Text, render_minimized, wordmergemode
|
||||
|
||||
|
||||
TestCase = unittest.TestCase
|
||||
@ -171,7 +171,7 @@ class TestMerge3(TestCase):
|
||||
|
||||
self.assertEqual(list(m3.merge_regions()), [("a", 0, 2)])
|
||||
|
||||
self.assertEqual(render_markers(m3), ([b"aaa", b"bbb"], 0))
|
||||
self.assertEqual(render_minimized(m3), ([b"aaa", b"bbb"], 0))
|
||||
|
||||
def test_no_conflicts(self):
|
||||
"""No conflicts because only one side changed"""
|
||||
@ -192,14 +192,14 @@ class TestMerge3(TestCase):
|
||||
[b"aaa\n", b"bbb\n"], [b"aaa\n", b"bbb\n", b"222\n"], [b"aaa\n", b"bbb\n"]
|
||||
)
|
||||
|
||||
self.assertEqual(b"".join(render_markers(m3)[0]), b"aaa\nbbb\n222\n")
|
||||
self.assertEqual(b"".join(render_minimized(m3)[0]), b"aaa\nbbb\n222\n")
|
||||
|
||||
def test_append_b(self):
|
||||
m3 = Merge3(
|
||||
[b"aaa\n", b"bbb\n"], [b"aaa\n", b"bbb\n"], [b"aaa\n", b"bbb\n", b"222\n"]
|
||||
)
|
||||
|
||||
self.assertEqual(b"".join(render_markers(m3)[0]), b"aaa\nbbb\n222\n")
|
||||
self.assertEqual(b"".join(render_minimized(m3)[0]), b"aaa\nbbb\n222\n")
|
||||
|
||||
def test_append_agreement(self):
|
||||
m3 = Merge3(
|
||||
@ -208,7 +208,7 @@ class TestMerge3(TestCase):
|
||||
[b"aaa\n", b"bbb\n", b"222\n"],
|
||||
)
|
||||
|
||||
self.assertEqual(b"".join(render_markers(m3)[0]), b"aaa\nbbb\n222\n")
|
||||
self.assertEqual(b"".join(render_minimized(m3)[0]), b"aaa\nbbb\n222\n")
|
||||
|
||||
def test_append_clash(self):
|
||||
m3 = Merge3(
|
||||
@ -217,7 +217,7 @@ class TestMerge3(TestCase):
|
||||
[b"aaa\n", b"bbb\n", b"333\n"],
|
||||
)
|
||||
|
||||
ml, conflictscount = render_markers(
|
||||
ml, conflictscount = render_minimized(
|
||||
m3,
|
||||
name_a=b"a",
|
||||
name_b=b"b",
|
||||
@ -238,7 +238,7 @@ class TestMerge3(TestCase):
|
||||
[b"aaa\n", b"222\n", b"bbb\n"],
|
||||
)
|
||||
|
||||
ml, conflictscount = render_markers(
|
||||
ml, conflictscount = render_minimized(
|
||||
m3,
|
||||
name_a=b"a",
|
||||
name_b=b"b",
|
||||
@ -276,7 +276,7 @@ class TestMerge3(TestCase):
|
||||
],
|
||||
)
|
||||
|
||||
ml, conflictscount = render_markers(
|
||||
ml, conflictscount = render_minimized(
|
||||
m3,
|
||||
name_a=b"a",
|
||||
name_b=b"b",
|
||||
@ -324,7 +324,7 @@ bbb
|
||||
def test_merge_poem(self):
|
||||
"""Test case from diff3 manual"""
|
||||
m3 = Merge3(TZU, LAO, TAO)
|
||||
ml, conflictscount = render_markers(m3, b"LAO", b"TAO")
|
||||
ml, conflictscount = render_minimized(m3, b"LAO", b"TAO")
|
||||
self.log("merge result:")
|
||||
self.log(decodeutf8(b"".join(ml)))
|
||||
self.assertEqual(ml, MERGED_RESULT)
|
||||
@ -343,7 +343,7 @@ bbb
|
||||
other_text.splitlines(True),
|
||||
this_text.splitlines(True),
|
||||
)
|
||||
m_lines, conflictscount = render_markers(m3, b"OTHER", b"THIS")
|
||||
m_lines, conflictscount = render_minimized(m3, b"OTHER", b"THIS")
|
||||
self.assertEqual(
|
||||
b"<<<<<<< OTHER\r\nc\r\n=======\r\nb\r\n"
|
||||
b">>>>>>> THIS\r\n".splitlines(True),
|
||||
@ -360,7 +360,7 @@ bbb
|
||||
other_text.splitlines(True),
|
||||
this_text.splitlines(True),
|
||||
)
|
||||
m_lines, conflictscount = render_markers(m3, b"OTHER", b"THIS")
|
||||
m_lines, conflictscount = render_minimized(m3, b"OTHER", b"THIS")
|
||||
self.assertEqual(
|
||||
b"<<<<<<< OTHER\rc\r=======\rb\r" b">>>>>>> THIS\r".splitlines(True),
|
||||
list(m_lines),
|
||||
@ -390,7 +390,7 @@ import {cached, LRU} from 'shared/LRU';
|
||||
this_text.splitlines(True),
|
||||
wordmerge=wordmergemode.ondemand,
|
||||
)
|
||||
m_lines, conflictscount = render_markers(m3, b"OTHER", b"THIS")
|
||||
m_lines, conflictscount = render_minimized(m3, b"OTHER", b"THIS")
|
||||
self.assertEqual(expected.splitlines(True), m_lines)
|
||||
self.assertEqual(0, conflictscount)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user