filemerge: use only the first line of the generated conflict marker for safety
Before this patch, with careless configuration (missing '|firstline'
filtering for '{desc}' keyword, for example), '[ui]
mergemarkertemplate' can make conflict markers multiple lines.
For ordinary users, advantage of allowing '[ui] mergemarkertemplate'
to generate multiple lines for customizing seems to be less than
advantage of disallowing it for safety.
This patch uses only the first line of the conflict marker generated
from '[ui] mergemarkertemplate' configuration for safety.
--- a/mercurial/filemerge.py Sun Jul 06 02:56:41 2014 +0900
+++ b/mercurial/filemerge.py Sun Jul 06 02:56:41 2014 +0900
@@ -287,6 +287,9 @@
label = ('%s:' % label).ljust(pad + 1)
mark = '%s %s' % (label, templater.stringify(templateresult))
+ if mark:
+ mark = mark.splitlines()[0] # split for safety
+
# The <<< marks add 8 to the length, and '...' adds three, so max
# length of the actual marker is 69.
maxlength = 80 - 8 - 3
--- a/tests/test-conflict.t Sun Jul 06 02:56:41 2014 +0900
+++ b/tests/test-conflict.t Sun Jul 06 02:56:41 2014 +0900
@@ -52,6 +52,26 @@
something
>>>>>>> other: test 1
+Verify line splitting of custom conflict marker which causes multiple lines
+
+ $ hg up -q --clean .
+ $ cat >> .hg/hgrc <<EOF
+ > [ui]
+ > mergemarkertemplate={author} {rev}\nfoo\nbar\nbaz
+ > EOF
+
+ $ hg -q merge 1
+ warning: conflicts during merge.
+ merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
+ [1]
+
+ $ cat a
+ <<<<<<< local: test 2
+ something else
+ =======
+ something
+ >>>>>>> other: test 1
+
Verify basic conflict markers
$ hg up -q --clean .