mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
d6ab2f95b5
The merge tool selecting algorithm is hardcoded to look for hgmerge in $PATH before it falls back to use internal merge. This fixes the test for this fallback to be tolerant to existing hgmerges.
154 lines
3.6 KiB
Bash
Executable File
154 lines
3.6 KiB
Bash
Executable File
#!/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:"
|
|
beforemerge
|
|
echo "# hg merge -r 2"
|
|
PATH=$BINDIR hg merge -r 2
|
|
aftermerge
|
|
|
|
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 false:"
|
|
domerge -r 2 --config merge-patterns.f=false
|
|
|
|
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
|