mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 08:47:12 +03:00
3dc47b69c7
- in parseargs(), check that --with-hg value is valid - add handy --local option for "--with-hg=../hg" - ensure that we always set PATH and PYTHONPATH (not just when doing a temporary install) - override any existing PYTHONPATH, so test success does not depend on whatever happens to be in the caller's environment - give tests a little more control by exporting $PYTHON to the environment; needed by test-convert and test-mergetool when they run hg with a stripped-down $PATH Also, add a big comment explaining all the corner cases to test for the next person who tries to modify this script.
173 lines
4.3 KiB
Bash
Executable File
173 lines
4.3 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"
|
|
# override $PATH to ensure hgmerge not visible; use $PYTHON in case we're
|
|
# running from a devel copy, not a temp installation
|
|
PATH=$BINDIR $PYTHON $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=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 ui.merge overrules priority
|
|
echo
|
|
|
|
echo "# ui.merge specifies false:"
|
|
domerge -r 2 --config ui.merge=false
|
|
|
|
echo "# ui.merge specifies internal:fail:"
|
|
domerge -r 2 --config ui.merge=internal:fail
|
|
|
|
echo "# ui.merge specifies internal:local:"
|
|
domerge -r 2 --config ui.merge=internal:local
|
|
|
|
echo "# ui.merge specifies internal:other:"
|
|
domerge -r 2 --config ui.merge=internal:other
|
|
|
|
echo "# ui.merge specifies internal:other but is overruled by pattern for false:"
|
|
domerge -r 2 --config ui.merge=internal:other --config merge-patterns.f=false
|
|
|
|
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 -y -r 2 --config merge-tools.true.checkchanged=1
|