Mercurial > hg
view tests/test-merge-tools @ 11488:f786fc4b8764 stable 1.6
log: follow filenames through renames (issue647)
In commands.log a displayer was initialized from
cmdutil.show_changeset() with the initial matchfn (which designates
the specified files which only is correct in the highest revision in
the range). prep() is handed the correct list of files, but
displayer.show() didn't use that list but keept using the original
matchfn.
The matchfn argument to cmdutil.show_changeset() wasn't specified in
other places and is only used in .show(), so now we give the matchfn
as an optional parameter to .show().
We do however still have to detect --patch and --stat from opts in
show_changeset() and let it imply a matchall, but that can now be
overruled with the new .show() matchfn parameter.
author | Mads Kiilerich <mads@kiilerich.com> |
---|---|
date | Tue, 29 Jun 2010 12:12:34 +0200 |
parents | c52057614c72 |
children | 4c94b6d0fb1c |
line wrap: on
line source
#!/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=/nonexisting/mergetool 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=/nonexisting/mergetool 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:prompt:" domerge -r 2 --config ui.merge=internal:prompt echo "# ui.merge specifies internal:dump:" domerge -r 2 --config ui.merge=internal:dump echo f.base: cat f.base echo f.local: cat f.local echo f.other: cat f.other rm f.base f.local f.other echo 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 '# Merge using tool with a path that must be quoted:' beforemerge cat <<EOF > 'my merge tool' #!/bin/sh cat "\$1" "\$2" "\$3" > "\$4" EOF chmod +x 'my merge tool' hg merge -r 2 --config merge-tools.true.executable='./my merge tool' --config merge-tools.true.args='$base $local $other $output' rm -f 'my merge tool' 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