test-merge-tools.t
979 lines
| 20.7 KiB
| text/troff
|
Tads3Lexer
/ tests / test-merge-tools.t
Matt Mackall
|
r12460 | test merge-tools configuration - mostly exercising filemerge.py | ||
$ unset HGMERGE # make sure HGMERGE doesn't interfere with the test | ||||
$ hg init | ||||
revision 0 | ||||
$ echo "revision 0" > f | ||||
$ echo "space" >> f | ||||
$ hg commit -Am "revision 0" | ||||
adding f | ||||
revision 1 | ||||
$ echo "revision 1" > f | ||||
$ echo "space" >> f | ||||
$ hg commit -Am "revision 1" | ||||
$ hg update 0 > /dev/null | ||||
revision 2 | ||||
$ echo "revision 2" > f | ||||
$ echo "space" >> f | ||||
$ hg commit -Am "revision 2" | ||||
created new head | ||||
$ hg update 0 > /dev/null | ||||
revision 3 - simple to merge | ||||
$ echo "revision 3" >> f | ||||
$ hg commit -Am "revision 3" | ||||
created new head | ||||
Pierre-Yves David
|
r22029 | |||
revision 4 - hard to merge | ||||
$ hg update 0 > /dev/null | ||||
$ echo "revision 4" > f | ||||
$ hg commit -Am "revision 4" | ||||
created new head | ||||
Matt Mackall
|
r12460 | $ echo "[merge-tools]" > .hg/hgrc | ||
Mads Kiilerich
|
r15243 | |||
Matt Mackall
|
r12460 | $ 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 | ||||
> } | ||||
Tool selection | ||||
default is internal merge: | ||||
$ beforemerge | ||||
[merge-tools] | ||||
# hg update -C 1 | ||||
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 | ||||
merging f | ||||
warning: conflicts during merge. | ||||
Matt Mackall
|
r15501 | merging f incomplete! (edit conflicts, then use 'hg resolve --mark') | ||
Matt Mackall
|
r12460 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
[1] | ||||
$ aftermerge | ||||
# cat f | ||||
Pierre-Yves David
|
r21693 | <<<<<<< local: ef83787e2614 - test: revision 1 | ||
Matt Mackall
|
r12460 | revision 1 | ||
======= | ||||
revision 2 | ||||
Pierre-Yves David
|
r21693 | >>>>>>> other: 0185f4e0cf02 - test: revision 2 | ||
Matt Mackall
|
r12460 | space | ||
# hg stat | ||||
M f | ||||
? f.orig | ||||
simplest hgrc using false for merge: | ||||
$ echo "false.whatever=" >> .hg/hgrc | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 | ||
Matt Mackall
|
r12460 | merging f | ||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Mads Kiilerich
|
r15545 | unexecutable file in $PATH shouldn't be found: | ||
$ touch false | ||||
$ hg up -qC 1 | ||||
$ PATH="`pwd`:$BINDIR" $PYTHON "$BINDIR"/hg merge -r 2 | ||||
merging f | ||||
warning: conflicts during merge. | ||||
merging f incomplete! (edit conflicts, then use 'hg resolve --mark') | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
[1] | ||||
$ rm false | ||||
executable directory in $PATH shouldn't be found: | ||||
$ mkdir false | ||||
$ hg up -qC 1 | ||||
$ PATH="`pwd`:$BINDIR" $PYTHON "$BINDIR"/hg merge -r 2 | ||||
merging f | ||||
warning: conflicts during merge. | ||||
merging f incomplete! (edit conflicts, then use 'hg resolve --mark') | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
[1] | ||||
$ rmdir false | ||||
Matt Mackall
|
r12460 | true with higher .priority gets precedence: | ||
$ echo "true.priority=1" >> .hg/hgrc | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 | ||
Matt Mackall
|
r12460 | merging f | ||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
unless lowered on command line: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config merge-tools.true.priority=-7 | ||
Matt Mackall
|
r12460 | merging f | ||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
or false set higher on command line: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config merge-tools.false.priority=117 | ||
Matt Mackall
|
r12460 | merging f | ||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
or true.executable not found in PATH: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
# hg update -C 1 | ||||
timeless@mozdev.org
|
r17492 | $ hg merge -r 2 --config merge-tools.true.executable=nonexistentmergetool | ||
Matt Mackall
|
r12460 | merging f | ||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
or true.executable with bogus path: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
# hg update -C 1 | ||||
timeless@mozdev.org
|
r17492 | $ hg merge -r 2 --config merge-tools.true.executable=/nonexistent/mergetool | ||
Matt Mackall
|
r12460 | merging f | ||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
but true.executable set to cat found in PATH works: | ||||
$ echo "true.executable=cat" >> .hg/hgrc | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 | ||
Mads Kiilerich
|
r13439 | merging f | ||
Matt Mackall
|
r12460 | revision 1 | ||
space | ||||
revision 0 | ||||
space | ||||
revision 2 | ||||
space | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
and true.executable set to cat with path works: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config merge-tools.true.executable=cat | ||
Mads Kiilerich
|
r13439 | merging f | ||
Matt Mackall
|
r12460 | revision 1 | ||
space | ||||
revision 0 | ||||
space | ||||
revision 2 | ||||
space | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
Mads Kiilerich
|
r16972 | #if unix-permissions | ||
Greg Ward
|
r15264 | environment variables in true.executable are handled: | ||
Matt Mackall
|
r19264 | $ echo 'echo "custom merge tool"' > .hg/merge.sh | ||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Greg Ward
|
r15264 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16967 | $ hg --config merge-tools.true.executable='sh' \ | ||
Matt Mackall
|
r19264 | > --config merge-tools.true.args=.hg/merge.sh \ | ||
Adrian Buehlmann
|
r16967 | > merge -r 2 | ||
Greg Ward
|
r15264 | merging f | ||
custom merge tool | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Greg Ward
|
r15264 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
Mads Kiilerich
|
r16972 | #endif | ||
Matt Mackall
|
r12460 | Tool selection and merge-patterns | ||
merge-patterns specifies new tool false: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config merge-patterns.f=false | ||
Matt Mackall
|
r12460 | merging f | ||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
merge-patterns specifies executable not found in PATH and gets warning: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
timeless@mozdev.org
|
r17492 | $ hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=nonexistentmergetool | ||
Matt Mackall
|
r12460 | couldn't find merge tool true specified for f | ||
merging f | ||||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
merge-patterns specifies executable with bogus path and gets warning: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
timeless@mozdev.org
|
r17492 | $ hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/nonexistent/mergetool | ||
Matt Mackall
|
r12460 | couldn't find merge tool true specified for f | ||
merging f | ||||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
ui.merge overrules priority | ||||
ui.merge specifies false: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config ui.merge=false | ||
Matt Mackall
|
r12460 | merging f | ||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
ui.merge specifies internal:fail: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config ui.merge=internal:fail | ||
Matt Mackall
|
r12460 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
Mads Kiilerich
|
r22706 | ui.merge specifies :local (without internal prefix): | ||
Matt Mackall
|
r12460 | |||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Mads Kiilerich
|
r22706 | $ hg merge -r 2 --config ui.merge=:local | ||
Matt Mackall
|
r12460 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||
(branch merge, don't forget to commit) | ||||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
ui.merge specifies internal:other: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config ui.merge=internal:other | ||
Matt Mackall
|
r12460 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||
(branch merge, don't forget to commit) | ||||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Matt Mackall
|
r12460 | # cat f | ||
revision 2 | ||||
space | ||||
# hg stat | ||||
M f | ||||
ui.merge specifies internal:prompt: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config ui.merge=internal:prompt | ||
Matt Mackall
|
r12460 | no tool found to merge f | ||
keep (l)ocal or take (o)ther? l | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
ui.merge specifies internal:dump: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config ui.merge=internal:dump | ||
Matt Mackall
|
r12460 | merging f | ||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.base | ||||
? f.local | ||||
? f.orig | ||||
? f.other | ||||
f.base: | ||||
$ cat f.base | ||||
revision 0 | ||||
space | ||||
f.local: | ||||
$ cat f.local | ||||
revision 1 | ||||
space | ||||
f.other: | ||||
$ cat f.other | ||||
revision 2 | ||||
space | ||||
$ rm f.base f.local f.other | ||||
ui.merge specifies internal:other but is overruled by pattern for false: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config ui.merge=internal:other --config merge-patterns.f=false | ||
Matt Mackall
|
r12460 | merging f | ||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Premerge | ||||
Steve Borho
|
r12788 | ui.merge specifies internal:other but is overruled by --tool=false | ||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Steve Borho
|
r12788 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --config ui.merge=internal:other --tool=false | ||
Steve Borho
|
r12788 | merging f | ||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Steve Borho
|
r12788 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Mads Kiilerich
|
r15243 | |||
Steve Borho
|
r12788 | HGMERGE specifies internal:other but is overruled by --tool=false | ||
$ HGMERGE=internal:other ; export HGMERGE | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Steve Borho
|
r12788 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 2 --tool=false | ||
Steve Borho
|
r12788 | merging f | ||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Steve Borho
|
r12788 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Mads Kiilerich
|
r15243 | |||
Steve Borho
|
r12788 | $ unset HGMERGE # make sure HGMERGE doesn't interfere with remaining tests | ||
Mads Kiilerich
|
r21552 | update is a merge ... | ||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg debugsetparent 0 | ||||
$ hg update -r 2 | ||||
merging f | ||||
revision 1 | ||||
space | ||||
revision 0 | ||||
space | ||||
revision 2 | ||||
space | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
$ aftermerge | ||||
# cat f | ||||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
update should also have --tool | ||||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg debugsetparent 0 | ||||
$ hg update -r 2 --tool false | ||||
merging f | ||||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges | ||||
[1] | ||||
$ aftermerge | ||||
# cat f | ||||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Matt Mackall
|
r12460 | Default is silent simplemerge: | ||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 3 | ||
Matt Mackall
|
r12460 | merging f | ||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
revision 3 | ||||
# hg stat | ||||
M f | ||||
.premerge=True is same: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 3 --config merge-tools.true.premerge=True | ||
Matt Mackall
|
r12460 | merging f | ||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
revision 3 | ||||
# hg stat | ||||
M f | ||||
.premerge=False executes merge-tool: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -r 3 --config merge-tools.true.premerge=False | ||
Mads Kiilerich
|
r13439 | merging f | ||
Matt Mackall
|
r12460 | revision 1 | ||
space | ||||
revision 0 | ||||
space | ||||
revision 0 | ||||
space | ||||
revision 3 | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
Pierre-Yves David
|
r22030 | premerge=keep keeps conflict markers in: | ||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg merge -r 4 --config merge-tools.true.premerge=keep | ||||
merging f | ||||
<<<<<<< local: ef83787e2614 - test: revision 1 | ||||
revision 1 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> other: 81448d39c9a0 - test: revision 4 | ||||
revision 0 | ||||
space | ||||
revision 4 | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ aftermerge | ||||
# cat f | ||||
<<<<<<< local: ef83787e2614 - test: revision 1 | ||||
revision 1 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> other: 81448d39c9a0 - test: revision 4 | ||||
# hg stat | ||||
M f | ||||
Pierre-Yves David
|
r22032 | premerge=keep-merge3 keeps conflict markers with base content: | ||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg merge -r 4 --config merge-tools.true.premerge=keep-merge3 | ||||
merging f | ||||
<<<<<<< local: ef83787e2614 - test: revision 1 | ||||
revision 1 | ||||
space | ||||
||||||| base | ||||
revision 0 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> other: 81448d39c9a0 - test: revision 4 | ||||
revision 0 | ||||
space | ||||
revision 4 | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ aftermerge | ||||
# cat f | ||||
<<<<<<< local: ef83787e2614 - test: revision 1 | ||||
revision 1 | ||||
space | ||||
||||||| base | ||||
revision 0 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> other: 81448d39c9a0 - test: revision 4 | ||||
# hg stat | ||||
M f | ||||
Pierre-Yves David
|
r22030 | |||
Matt Mackall
|
r12460 | Tool execution | ||
Mads Kiilerich
|
r15243 | set tools.args explicit to include $base $local $other $output: | ||
Matt Mackall
|
r12460 | $ beforemerge | ||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg merge -r 2 --config merge-tools.true.executable=head --config merge-tools.true.args='$base $local $other $output' \ | ||||
> | sed 's,==> .* <==,==> ... <==,g' | ||||
Mads Kiilerich
|
r13439 | merging f | ||
Matt Mackall
|
r12460 | ==> ... <== | ||
revision 0 | ||||
space | ||||
==> ... <== | ||||
revision 1 | ||||
space | ||||
==> ... <== | ||||
revision 2 | ||||
space | ||||
==> ... <== | ||||
revision 1 | ||||
space | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ aftermerge | ||||
# cat f | ||||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
Mads Kiilerich
|
r15243 | |||
Merge with "echo mergeresult > $local": | ||||
Matt Mackall
|
r12460 | $ beforemerge | ||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > $local' | ||||
merging f | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ aftermerge | ||||
# cat f | ||||
mergeresult | ||||
# hg stat | ||||
M f | ||||
Mads Kiilerich
|
r15243 | |||
- and $local is the file f: | ||||
Matt Mackall
|
r12460 | $ beforemerge | ||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > f' | ||||
merging f | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ aftermerge | ||||
# cat f | ||||
mergeresult | ||||
# hg stat | ||||
M f | ||||
Mads Kiilerich
|
r15243 | |||
Merge with "echo mergeresult > $output" - the variable is a bit magic: | ||||
Matt Mackall
|
r12460 | $ beforemerge | ||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg merge -r 2 --config merge-tools.true.executable=echo --config merge-tools.true.args='mergeresult > $output' | ||||
merging f | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ aftermerge | ||||
# cat f | ||||
mergeresult | ||||
# hg stat | ||||
M f | ||||
Merge using tool with a path that must be quoted: | ||||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ cat <<EOF > 'my merge tool' | ||||
> cat "\$1" "\$2" "\$3" > "\$4" | ||||
> EOF | ||||
Adrian Buehlmann
|
r16967 | $ hg --config merge-tools.true.executable='sh' \ | ||
> --config merge-tools.true.args='"./my merge tool" $base $local $other $output' \ | ||||
> merge -r 2 | ||||
Matt Mackall
|
r12460 | merging f | ||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ rm -f 'my merge tool' | ||||
$ aftermerge | ||||
# cat f | ||||
revision 0 | ||||
space | ||||
revision 1 | ||||
space | ||||
revision 2 | ||||
space | ||||
# hg stat | ||||
M f | ||||
Keegan Carruthers-Smith
|
r17885 | Issue3581: Merging a filename that needs to be quoted | ||
Matt Mackall
|
r17902 | (This test doesn't work on Windows filesystems even on Linux, so check | ||
for Unix-like permission) | ||||
Keegan Carruthers-Smith
|
r17885 | |||
Matt Mackall
|
r17902 | #if unix-permissions | ||
Keegan Carruthers-Smith
|
r17885 | $ beforemerge | ||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ echo "revision 5" > '"; exit 1; echo "' | ||||
$ hg commit -Am "revision 5" | ||||
adding "; exit 1; echo " | ||||
warning: filename contains '"', which is reserved on Windows: '"; exit 1; echo "' | ||||
Pierre-Yves David
|
r22029 | $ hg update -C 1 > /dev/null | ||
$ echo "revision 6" > '"; exit 1; echo "' | ||||
$ hg commit -Am "revision 6" | ||||
adding "; exit 1; echo " | ||||
warning: filename contains '"', which is reserved on Windows: '"; exit 1; echo "' | ||||
Keegan Carruthers-Smith
|
r17885 | created new head | ||
Pierre-Yves David
|
r22029 | $ hg merge --config merge-tools.true.executable="true" -r 5 | ||
Keegan Carruthers-Smith
|
r17885 | merging "; exit 1; echo " | ||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg update -C 1 > /dev/null | ||||
Keegan Carruthers-Smith
|
r17901 | #endif | ||
Keegan Carruthers-Smith
|
r17885 | |||
Matt Mackall
|
r12460 | Merge post-processing | ||
cat is a bad merge-tool and doesn't change: | ||||
Adrian Buehlmann
|
r16961 | $ beforemerge | ||
Matt Mackall
|
r12460 | [merge-tools] | ||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Adrian Buehlmann
|
r16961 | $ hg merge -y -r 2 --config merge-tools.true.checkchanged=1 | ||
Mads Kiilerich
|
r13439 | merging f | ||
Matt Mackall
|
r12460 | revision 1 | ||
space | ||||
revision 0 | ||||
space | ||||
revision 2 | ||||
space | ||||
output file f appears unchanged | ||||
was merge successful (yn)? n | ||||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Mads Kiilerich
|
r18256 | |||
#if symlink | ||||
internal merge cannot handle symlinks and shouldn't try: | ||||
$ hg update -q -C 1 | ||||
$ rm f | ||||
$ ln -s symlink f | ||||
$ hg commit -qm 'f is symlink' | ||||
$ hg merge -r 2 --tool internal:merge | ||||
merging f | ||||
Mads Kiilerich
|
r22707 | warning: internal :merge cannot merge symlinks for f | ||
Mads Kiilerich
|
r18256 | merging f incomplete! (edit conflicts, then use 'hg resolve --mark') | ||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon | ||||
[1] | ||||
#endif | ||||