diff -r 5fb312ba29a8 -r 737f274d1915 tests/test-merge-tools --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-merge-tools Sun Jan 25 21:20:11 2009 +0100 @@ -0,0 +1,150 @@ +#!/bin/sh + +# test merge-tools configuration - mostly exercising filemerge.py + +unset HGMERGE # make sure HGMERGE doesn't interfere with the test + +hg init + +echo "# revision 0" +echo "revision 0" > f +echo "space" >> f +hg commit -Am "revision 0" -d "1000000 0" + +echo "# revision 1" +echo "revision 1" > f +echo "space" >> f +hg commit -Am "revision 1" -d "1000000 0" + +hg update 0 > /dev/null +echo "# revision 2" +echo "revision 2" > f +echo "space" >> f +hg commit -Am "revision 2" -d "1000000 0" + +hg update 0 > /dev/null +echo "# revision 3 - simple to merge" +echo "revision 3" >> f +hg commit -Am "revision 3" -d "1000000 0" + + +echo "[merge-tools]" > .hg/hgrc +echo + +beforemerge() { + cat .hg/hgrc + echo "# hg update -C 1" + hg update -C 1 > /dev/null +} + +aftermerge() { + echo "# cat f" + cat f + echo "# hg stat" + hg stat + rm -f f.orig + echo +} + +domerge() { + beforemerge + echo "# hg merge $*" + hg merge $* + aftermerge +} + +echo +echo Tool selection +echo + +echo "# default is internal merge:" +domerge -r 2 + +echo "# simplest hgrc using false for merge:" +echo "false.whatever=" >> .hg/hgrc +domerge -r 2 + +echo "# true with higher .priority gets precedence:" +echo "true.priority=1" >> .hg/hgrc +domerge -r 2 + +echo "# unless lowered on command line:" +domerge -r 2 --config merge-tools.true.priority=-7 + +echo "# or false set higher on command line:" +domerge -r 2 --config merge-tools.false.priority=117 + +echo "# or true.executable not found in PATH:" +domerge -r 2 --config merge-tools.true.executable=nonexistingmergetool + +echo "# or true.executable with bogus path:" +domerge -r 2 --config merge-tools.true.executable=/bin/nonexistingmergetool + +echo "# but true.executable set to cat found in PATH works:" +echo "true.executable=cat" >> .hg/hgrc +domerge -r 2 + +echo "# and true.executable set to cat with path works:" +domerge -r 2 --config merge-tools.true.executable=/bin/cat + + +echo +echo Tool selection and merge-patterns +echo + +echo "# merge-patterns specifies new tool tac:" +domerge -r 2 --config merge-patterns.f=tac + +echo "# merge-patterns specifies executable not found in PATH and gets warning:" +domerge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=nonexistingmergetool + +echo "# merge-patterns specifies executable with bogus path and gets warning:" +domerge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/bin/nonexistingmergetool + + +echo +echo Premerge +echo + +echo "# Default is silent simplemerge:" +domerge -r 3 + +echo "# .premerge=True is same:" +domerge -r 3 --config merge-tools.true.premerge=True + +echo "# .premerge=False executes merge-tool:" +domerge -r 3 --config merge-tools.true.premerge=False + + +echo +echo Tool execution +echo + +echo '# set tools.args explicit to include $base $local $other $output:' # default '$local $base $other' +beforemerge +hg merge -r 2 --config merge-tools.true.executable=head --config merge-tools.true.args='$base $local $other $output' \ + | sed 's,==> .* <==,==> ... <==,g' +aftermerge + +echo '# Merge with "echo mergeresult > $local":' +beforemerge +hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > $local' +aftermerge + +echo '# - and $local is the file f:' +beforemerge +hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > f' +aftermerge + +echo '# Merge with "echo mergeresult > $output" - the variable is a bit magic:' +beforemerge +hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > $output' +aftermerge + + +echo +echo Merge post-processing +echo + +echo "# cat is a bad merge-tool and doesn't change:" +domerge -r 2 --config merge-tools.true.checkchanged=1