merge: allow smarter tool configuration
Add [merge-tool] hgrc section with:
<tool>.executable = name or path (<tool>)
<tool>.args = args with $local/base/other/output ($local $base $other)
<tool>.priority = priority (default 0)
<tool>.binary = handles binary (False)
<tool>.symlink = handles symlinks (False)
<tool>.checkconflict = check for conflict markers (False)
<tool>.premerge = try internal simplemerge (True if not binary or symlink)
Four built-in tools: internal:{merge,local,other,fail}
Add [merge-patterns] section of the form:
<pattern> = <tool>
Priority of settings is:
HGMERGE
merge-patterns
ui:merge
merge-tools by priority
hgmerge, if it can be found
Changes:
unsuccessful merges leave .orig files
#!/bin/sh
echo '[extensions]' >> $HGRCPATH
echo 'hgext.mq=' >> $HGRCPATH
show_branch_cache()
{
branches=.hg/branch.cache
# force cache (re)generation
hg log -r does-not-exist 2> /dev/null
hg log -r tip --template 'tip: #rev#\n'
if [ -f $branches ]; then
sort $branches
else
echo No $branches
fi
if [ "$1" = 1 ]; then
for b in foo bar; do
hg log -r $b --template "branch $b: "'#rev#\n'
done
fi
}
hg init a
cd a
hg qinit -c
echo '# mq patch on an empty repo'
hg qnew p1
show_branch_cache
echo > pfile
hg add pfile
hg qrefresh -m 'patch 1'
show_branch_cache
echo
echo '# some regular revisions'
hg qpop
echo foo > foo
hg add foo
echo foo > .hg/branch
hg ci -m 'branch foo' -d '1000000 0'
echo bar > bar
hg add bar
echo bar > .hg/branch
hg ci -m 'branch bar' -d '1000000 0'
show_branch_cache
echo
echo '# add some mq patches'
hg qpush
show_branch_cache
hg qnew p2
echo foo > .hg/branch
echo foo2 >> foo
hg qrefresh -m 'patch 2'
show_branch_cache 1
echo
echo '# removing the cache'
rm .hg/branch.cache
show_branch_cache 1
echo
echo '# importing rev 1 (the cache now ends in one of the patches)'
hg qimport -r 1 -n p0
show_branch_cache 1
hg log -r qbase --template 'qbase: #rev#\n'
echo
echo '# detect an invalid cache'
hg qpop -a
hg qpush -a
show_branch_cache