test-merge-tools.t
1628 lines
| 36.3 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 | ||||
Siddharth Agarwal
|
r26897 | > echo "# hg resolve --list" | ||
> hg resolve --list | ||||
Matt Mackall
|
r12460 | > 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 | ||||
timeless@mozdev.org
|
r26168 | $ PATH="$BINDIR:/usr/sbin" $PYTHON "$BINDIR"/hg merge -r 2 | ||
Matt Mackall
|
r12460 | merging f | ||
Siddharth Agarwal
|
r26614 | warning: conflicts while merging f! (edit, then use 'hg resolve --mark') | ||
Matt Mackall
|
r12460 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Matt Mackall
|
r12460 | [1] | ||
$ aftermerge | ||||
# cat f | ||||
Kostia Balytskyi
|
r30460 | <<<<<<< working copy: ef83787e2614 - test: revision 1 | ||
Matt Mackall
|
r12460 | revision 1 | ||
======= | ||||
revision 2 | ||||
Kostia Balytskyi
|
r30460 | >>>>>>> merge rev: 0185f4e0cf02 - test: revision 2 | ||
Matt Mackall
|
r12460 | space | ||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
Matt Mackall
|
r24809 | #if unix-permissions | ||
Mads Kiilerich
|
r15545 | unexecutable file in $PATH shouldn't be found: | ||
Matt Mackall
|
r24809 | $ echo "echo fail" > false | ||
Mads Kiilerich
|
r15545 | $ hg up -qC 1 | ||
timeless@mozdev.org
|
r26168 | $ PATH="`pwd`:$BINDIR:/usr/sbin" $PYTHON "$BINDIR"/hg merge -r 2 | ||
Mads Kiilerich
|
r15545 | merging f | ||
Siddharth Agarwal
|
r26614 | warning: conflicts while merging f! (edit, then use 'hg resolve --mark') | ||
Mads Kiilerich
|
r15545 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Mads Kiilerich
|
r15545 | [1] | ||
$ rm false | ||||
Matt Mackall
|
r24809 | #endif | ||
Mads Kiilerich
|
r15545 | executable directory in $PATH shouldn't be found: | ||
$ mkdir false | ||||
$ hg up -qC 1 | ||||
timeless@mozdev.org
|
r26168 | $ PATH="`pwd`:$BINDIR:/usr/sbin" $PYTHON "$BINDIR"/hg merge -r 2 | ||
Mads Kiilerich
|
r15545 | merging f | ||
Siddharth Agarwal
|
r26614 | warning: conflicts while merging f! (edit, then use 'hg resolve --mark') | ||
Mads Kiilerich
|
r15545 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Mads Kiilerich
|
r15545 | [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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
Augie Fackler
|
r26730 | or true set to disabled: | ||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
# hg update -C 1 | ||||
$ hg merge -r 2 --config merge-tools.true.disabled=yes | ||||
merging f | ||||
merging f failed! | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Augie Fackler
|
r26730 | [1] | ||
$ aftermerge | ||||
# cat f | ||||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Augie Fackler
|
r26730 | |||
Matt Mackall
|
r12460 | 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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Greg Ward
|
r15264 | |||
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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||
FUJIWARA Katsunori
|
r32254 | couldn't find merge tool true (for pattern f) | ||
Matt Mackall
|
r12460 | merging f | ||
FUJIWARA Katsunori
|
r32254 | couldn't find merge tool true (for pattern f) | ||
Matt Mackall
|
r12460 | merging f failed! | ||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||
FUJIWARA Katsunori
|
r32254 | couldn't find merge tool true (for pattern f) | ||
Matt Mackall
|
r12460 | merging f | ||
FUJIWARA Katsunori
|
r32254 | couldn't find merge tool true (for pattern f) | ||
Matt Mackall
|
r12460 | merging f failed! | ||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Matt Mackall
|
r12460 | |||
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 | ||
FUJIWARA Katsunori
|
r32253 | keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved for f? u | ||
Siddharth Agarwal
|
r27164 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Siddharth Agarwal
|
r27164 | [1] | ||
Adrian Buehlmann
|
r16961 | $ aftermerge | ||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
Siddharth Agarwal
|
r27164 | U f | ||
Matt Mackall
|
r12460 | |||
Siddharth Agarwal
|
r27162 | ui.merge specifies :prompt, with 'leave unresolved' chosen | ||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg merge -r 2 --config ui.merge=:prompt --config ui.interactive=True << EOF | ||||
> u | ||||
> EOF | ||||
FUJIWARA Katsunori
|
r32253 | keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved for f? u | ||
Siddharth Agarwal
|
r27162 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Siddharth Agarwal
|
r27162 | [1] | ||
$ aftermerge | ||||
# cat f | ||||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
# hg resolve --list | ||||
U f | ||||
Siddharth Agarwal
|
r26898 | prompt with EOF | ||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg merge -r 2 --config ui.merge=internal:prompt --config ui.interactive=true | ||||
FUJIWARA Katsunori
|
r32253 | keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved for f? | ||
Siddharth Agarwal
|
r26898 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Siddharth Agarwal
|
r26898 | [1] | ||
$ aftermerge | ||||
# cat f | ||||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
# hg resolve --list | ||||
U f | ||||
$ hg resolve --all --config ui.merge=internal:prompt --config ui.interactive=true | ||||
FUJIWARA Katsunori
|
r32253 | keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved for f? | ||
Siddharth Agarwal
|
r26898 | [1] | ||
$ aftermerge | ||||
# cat f | ||||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
# hg resolve --list | ||||
U f | ||||
Siddharth Agarwal
|
r26899 | $ rm f | ||
$ hg resolve --all --config ui.merge=internal:prompt --config ui.interactive=true | ||||
FUJIWARA Katsunori
|
r32253 | keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved for f? | ||
Siddharth Agarwal
|
r26899 | [1] | ||
$ aftermerge | ||||
# cat f | ||||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
# hg resolve --list | ||||
U f | ||||
$ hg resolve --all --config ui.merge=internal:prompt | ||||
FUJIWARA Katsunori
|
r32253 | keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved for f? u | ||
Siddharth Agarwal
|
r27164 | [1] | ||
Siddharth Agarwal
|
r26899 | $ aftermerge | ||
# cat f | ||||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
# hg resolve --list | ||||
Siddharth Agarwal
|
r27164 | U f | ||
Siddharth Agarwal
|
r26899 | |||
Matt Mackall
|
r12460 | 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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' 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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
FUJIWARA Katsunori
|
r32255 | check that internal:dump doesn't dump files if premerge runs | ||
successfully | ||||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg merge -r 3 --config ui.merge=internal:dump | ||||
merging f | ||||
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 | ||||
revision 3 | ||||
# hg stat | ||||
M f | ||||
# hg resolve --list | ||||
R f | ||||
check that internal:forcedump dumps files, even if local and other can | ||||
be merged easily | ||||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ hg merge -r 3 --config ui.merge=internal:forcedump | ||||
merging f | ||||
0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
FUJIWARA Katsunori
|
r32255 | [1] | ||
$ aftermerge | ||||
# cat f | ||||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.base | ||||
? f.local | ||||
? f.orig | ||||
? f.other | ||||
# hg resolve --list | ||||
U f | ||||
$ cat f.base | ||||
revision 0 | ||||
space | ||||
$ cat f.local | ||||
revision 1 | ||||
space | ||||
$ cat f.other | ||||
revision 0 | ||||
space | ||||
revision 3 | ||||
$ rm -f f.base f.local f.other | ||||
Matt Mackall
|
r12460 | 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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Steve Borho
|
r12788 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Steve Borho
|
r12788 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Mads Kiilerich
|
r15243 | |||
Steve Borho
|
r12788 | $ unset HGMERGE # make sure HGMERGE doesn't interfere with remaining tests | ||
Mads Kiilerich
|
r21552 | update is a merge ... | ||
FUJIWARA Katsunori
|
r25753 | (this also tests that files reverted with '--rev REV' are treated as | ||
"modified", even if none of mode, size and timestamp of them isn't | ||||
changed on the filesystem (see also issue4583)) | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [fakedirstatewritetime] | ||||
> # emulate invoking dirstate.write() via repo.status() | ||||
> # at 2000-01-01 00:00 | ||||
> fakenow = 200001010000 | ||||
> EOF | ||||
Mads Kiilerich
|
r21552 | $ beforemerge | ||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Martin von Zweigbergk
|
r24121 | $ hg update -q 0 | ||
FUJIWARA Katsunori
|
r24843 | $ f -s f | ||
f: size=17 | ||||
$ touch -t 200001010000 f | ||||
FUJIWARA Katsunori
|
r25753 | $ hg debugrebuildstate | ||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> fakedirstatewritetime = $TESTDIR/fakedirstatewritetime.py | ||||
> EOF | ||||
Martin von Zweigbergk
|
r24121 | $ hg revert -q -r 1 . | ||
FUJIWARA Katsunori
|
r25753 | $ cat >> $HGRCPATH <<EOF | ||
> [extensions] | ||||
> fakedirstatewritetime = ! | ||||
> EOF | ||||
FUJIWARA Katsunori
|
r24843 | $ f -s f | ||
f: size=17 | ||||
$ touch -t 200001010000 f | ||||
$ hg status f | ||||
M f | ||||
Mads Kiilerich
|
r21552 | $ 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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Mads Kiilerich
|
r21552 | |||
update should also have --tool | ||||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
Martin von Zweigbergk
|
r24121 | $ hg update -q 0 | ||
FUJIWARA Katsunori
|
r24843 | $ f -s f | ||
f: size=17 | ||||
$ touch -t 200001010000 f | ||||
FUJIWARA Katsunori
|
r25753 | $ hg debugrebuildstate | ||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> fakedirstatewritetime = $TESTDIR/fakedirstatewritetime.py | ||||
> EOF | ||||
Martin von Zweigbergk
|
r24121 | $ hg revert -q -r 1 . | ||
FUJIWARA Katsunori
|
r25753 | $ cat >> $HGRCPATH <<EOF | ||
> [extensions] | ||||
> fakedirstatewritetime = ! | ||||
> EOF | ||||
FUJIWARA Katsunori
|
r24843 | $ f -s f | ||
f: size=17 | ||||
$ touch -t 200001010000 f | ||||
$ hg status f | ||||
M f | ||||
Mads Kiilerich
|
r21552 | $ 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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
Mads Kiilerich
|
r21552 | |||
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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Matt Mackall
|
r12460 | |||
.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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Matt Mackall
|
r12460 | |||
.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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Kostia Balytskyi
|
r30460 | <<<<<<< working copy: ef83787e2614 - test: revision 1 | ||
Pierre-Yves David
|
r22030 | revision 1 | ||
space | ||||
======= | ||||
revision 4 | ||||
Simon Farnsworth
|
r30062 | >>>>>>> merge rev: 81448d39c9a0 - test: revision 4 | ||
Pierre-Yves David
|
r22030 | 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 | ||||
Kostia Balytskyi
|
r30460 | <<<<<<< working copy: ef83787e2614 - test: revision 1 | ||
Pierre-Yves David
|
r22030 | revision 1 | ||
space | ||||
======= | ||||
revision 4 | ||||
Simon Farnsworth
|
r30062 | >>>>>>> merge rev: 81448d39c9a0 - test: revision 4 | ||
Pierre-Yves David
|
r22030 | # hg stat | ||
M f | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Pierre-Yves David
|
r22030 | |||
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 | ||||
Kostia Balytskyi
|
r30460 | <<<<<<< working copy: ef83787e2614 - test: revision 1 | ||
Pierre-Yves David
|
r22032 | revision 1 | ||
space | ||||
||||||| base | ||||
revision 0 | ||||
space | ||||
======= | ||||
revision 4 | ||||
Simon Farnsworth
|
r30062 | >>>>>>> merge rev: 81448d39c9a0 - test: revision 4 | ||
Pierre-Yves David
|
r22032 | 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 | ||||
Kostia Balytskyi
|
r30460 | <<<<<<< working copy: ef83787e2614 - test: revision 1 | ||
Pierre-Yves David
|
r22032 | revision 1 | ||
space | ||||
||||||| base | ||||
revision 0 | ||||
space | ||||
======= | ||||
revision 4 | ||||
Simon Farnsworth
|
r30062 | >>>>>>> merge rev: 81448d39c9a0 - test: revision 4 | ||
Pierre-Yves David
|
r22032 | # hg stat | ||
M f | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Pierre-Yves David
|
r22032 | |||
Kyle Lippincott
|
r35925 | premerge=keep respects ui.mergemarkers=basic: | ||
$ 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 --config ui.mergemarkers=basic | ||||
merging f | ||||
<<<<<<< working copy | ||||
revision 1 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> merge rev | ||||
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 | ||||
<<<<<<< working copy | ||||
revision 1 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> merge rev | ||||
# hg stat | ||||
M f | ||||
# hg resolve --list | ||||
R f | ||||
premerge=keep ignores ui.mergemarkers=basic if true.mergemarkers=detailed: | ||||
$ 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 \ | ||||
> --config ui.mergemarkers=basic \ | ||||
> --config merge-tools.true.mergemarkers=detailed | ||||
merging f | ||||
<<<<<<< working copy: ef83787e2614 - test: revision 1 | ||||
revision 1 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> merge rev: 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 | ||||
<<<<<<< working copy: ef83787e2614 - test: revision 1 | ||||
revision 1 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> merge rev: 81448d39c9a0 - test: revision 4 | ||||
# hg stat | ||||
M f | ||||
# hg resolve --list | ||||
R f | ||||
premerge=keep respects ui.mergemarkertemplate instead of | ||||
true.mergemarkertemplate if true.mergemarkers=basic: | ||||
$ 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 \ | ||||
> --config ui.mergemarkertemplate='uitmpl {rev}' \ | ||||
> --config merge-tools.true.mergemarkertemplate='tooltmpl {short(node)}' | ||||
merging f | ||||
<<<<<<< working copy: uitmpl 1 | ||||
revision 1 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> merge rev: uitmpl 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 | ||||
<<<<<<< working copy: uitmpl 1 | ||||
revision 1 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> merge rev: uitmpl 4 | ||||
# hg stat | ||||
M f | ||||
# hg resolve --list | ||||
R f | ||||
premerge=keep respects true.mergemarkertemplate instead of | ||||
true.mergemarkertemplate if true.mergemarkers=detailed: | ||||
$ 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 \ | ||||
> --config ui.mergemarkertemplate='uitmpl {rev}' \ | ||||
> --config merge-tools.true.mergemarkertemplate='tooltmpl {short(node)}' \ | ||||
> --config merge-tools.true.mergemarkers=detailed | ||||
merging f | ||||
<<<<<<< working copy: tooltmpl ef83787e2614 | ||||
revision 1 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> merge rev: tooltmpl 81448d39c9a0 | ||||
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 | ||||
<<<<<<< working copy: tooltmpl ef83787e2614 | ||||
revision 1 | ||||
space | ||||
======= | ||||
revision 4 | ||||
>>>>>>> merge rev: tooltmpl 81448d39c9a0 | ||||
# hg stat | ||||
M f | ||||
# hg resolve --list | ||||
R 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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R 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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R 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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R 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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Matt Mackall
|
r12460 | |||
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 | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
R f | ||||
Matt Mackall
|
r12460 | |||
Kyle Lippincott
|
r35925 | Merge using a tool that supports labellocal, labelother, and labelbase, checking | ||
that they're quoted properly as well. This is using the default 'basic' | ||||
mergemarkers even though ui.mergemarkers is 'detailed', so it's ignoring both | ||||
mergemarkertemplate settings: | ||||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ cat <<EOF > printargs_merge_tool | ||||
> while test \$# -gt 0; do echo arg: \"\$1\"; shift; done | ||||
> EOF | ||||
$ hg --config merge-tools.true.executable='sh' \ | ||||
> --config merge-tools.true.args='./printargs_merge_tool ll:$labellocal lo: $labelother lb:$labelbase": "$base' \ | ||||
> --config merge-tools.true.mergemarkertemplate='tooltmpl {short(node)}' \ | ||||
> --config ui.mergemarkertemplate='uitmpl {rev}' \ | ||||
> --config ui.mergemarkers=detailed \ | ||||
> merge -r 2 | ||||
merging f | ||||
arg: "ll:working copy" | ||||
arg: "lo:" | ||||
arg: "merge rev" | ||||
Matt Harbison
|
r36071 | arg: "lb:base: */f~base.*" (glob) | ||
Kyle Lippincott
|
r35925 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||
(branch merge, don't forget to commit) | ||||
$ rm -f 'printargs_merge_tool' | ||||
Merge using a tool that supports labellocal, labelother, and labelbase, checking | ||||
that they're quoted properly as well. This is using 'detailed' mergemarkers, | ||||
even though ui.mergemarkers is 'basic', and using the tool's | ||||
mergemarkertemplate: | ||||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ cat <<EOF > printargs_merge_tool | ||||
> while test \$# -gt 0; do echo arg: \"\$1\"; shift; done | ||||
> EOF | ||||
$ hg --config merge-tools.true.executable='sh' \ | ||||
> --config merge-tools.true.args='./printargs_merge_tool ll:$labellocal lo: $labelother lb:$labelbase": "$base' \ | ||||
> --config merge-tools.true.mergemarkers=detailed \ | ||||
> --config merge-tools.true.mergemarkertemplate='tooltmpl {short(node)}' \ | ||||
> --config ui.mergemarkertemplate='uitmpl {rev}' \ | ||||
> --config ui.mergemarkers=basic \ | ||||
> merge -r 2 | ||||
merging f | ||||
arg: "ll:working copy: tooltmpl ef83787e2614" | ||||
arg: "lo:" | ||||
arg: "merge rev: tooltmpl 0185f4e0cf02" | ||||
Matt Harbison
|
r36071 | arg: "lb:base: */f~base.*" (glob) | ||
Kyle Lippincott
|
r35925 | 0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||
(branch merge, don't forget to commit) | ||||
$ rm -f 'printargs_merge_tool' | ||||
The merge tool still gets labellocal and labelother as 'basic' even when | ||||
premerge=keep is used and has 'detailed' markers: | ||||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ cat <<EOF > mytool | ||||
> echo labellocal: \"\$1\" | ||||
> echo labelother: \"\$2\" | ||||
> echo "output (arg)": \"\$3\" | ||||
> echo "output (contents)": | ||||
> cat "\$3" | ||||
> EOF | ||||
$ hg --config merge-tools.true.executable='sh' \ | ||||
> --config merge-tools.true.args='mytool $labellocal $labelother $output' \ | ||||
> --config merge-tools.true.premerge=keep \ | ||||
> --config merge-tools.true.mergemarkertemplate='tooltmpl {short(node)}' \ | ||||
> --config ui.mergemarkertemplate='uitmpl {rev}' \ | ||||
> --config ui.mergemarkers=detailed \ | ||||
> merge -r 2 | ||||
merging f | ||||
labellocal: "working copy" | ||||
labelother: "merge rev" | ||||
output (arg): "$TESTTMP/f" | ||||
output (contents): | ||||
<<<<<<< working copy: uitmpl 1 | ||||
revision 1 | ||||
======= | ||||
revision 2 | ||||
>>>>>>> merge rev: uitmpl 2 | ||||
space | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ rm -f 'mytool' | ||||
premerge=keep uses the *tool's* mergemarkertemplate if tool's | ||||
mergemarkers=detailed; labellocal and labelother also use the tool's template | ||||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
$ cat <<EOF > mytool | ||||
> echo labellocal: \"\$1\" | ||||
> echo labelother: \"\$2\" | ||||
> echo "output (arg)": \"\$3\" | ||||
> echo "output (contents)": | ||||
> cat "\$3" | ||||
> EOF | ||||
$ hg --config merge-tools.true.executable='sh' \ | ||||
> --config merge-tools.true.args='mytool $labellocal $labelother $output' \ | ||||
> --config merge-tools.true.premerge=keep \ | ||||
> --config merge-tools.true.mergemarkers=detailed \ | ||||
> --config merge-tools.true.mergemarkertemplate='tooltmpl {short(node)}' \ | ||||
> --config ui.mergemarkertemplate='uitmpl {rev}' \ | ||||
> --config ui.mergemarkers=detailed \ | ||||
> merge -r 2 | ||||
merging f | ||||
labellocal: "working copy: tooltmpl ef83787e2614" | ||||
labelother: "merge rev: tooltmpl 0185f4e0cf02" | ||||
output (arg): "$TESTTMP/f" | ||||
output (contents): | ||||
<<<<<<< working copy: tooltmpl ef83787e2614 | ||||
revision 1 | ||||
======= | ||||
revision 2 | ||||
>>>>>>> merge rev: tooltmpl 0185f4e0cf02 | ||||
space | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ rm -f 'mytool' | ||||
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 | ||||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Adrian Buehlmann
|
r16961 | [1] | ||
$ aftermerge | ||||
Matt Mackall
|
r12460 | # cat f | ||
revision 1 | ||||
space | ||||
# hg stat | ||||
M f | ||||
? f.orig | ||||
Siddharth Agarwal
|
r26897 | # hg resolve --list | ||
U f | ||||
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 | ||
Siddharth Agarwal
|
r26614 | warning: conflicts while merging f! (edit, then use 'hg resolve --mark') | ||
Mads Kiilerich
|
r18256 | 0 files updated, 0 files merged, 0 files removed, 1 files unresolved | ||
Pulkit Goyal
|
r35722 | use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon | ||
Mads Kiilerich
|
r18256 | [1] | ||
#endif | ||||
Mads Kiilerich
|
r30538 | |||
Verify naming of temporary files and that extension is preserved: | ||||
$ hg update -q -C 1 | ||||
$ hg mv f f.txt | ||||
$ hg ci -qm "f.txt" | ||||
$ hg update -q -C 2 | ||||
$ hg merge -y -r tip --tool echo --config merge-tools.echo.args='$base $local $other $output' | ||||
merging f and f.txt to f.txt | ||||
*/f~base.?????? $TESTTMP/f.txt.orig */f~other.??????.txt $TESTTMP/f.txt (glob) | ||||
0 files updated, 1 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
FUJIWARA Katsunori
|
r32256 | |||
Check that debugpicktool examines which merge tool is chosen for | ||||
specified file as expected | ||||
$ beforemerge | ||||
[merge-tools] | ||||
false.whatever= | ||||
true.priority=1 | ||||
true.executable=cat | ||||
# hg update -C 1 | ||||
(default behavior: checking files in the working parent context) | ||||
$ hg manifest | ||||
f | ||||
$ hg debugpickmergetool | ||||
f = true | ||||
(-X/-I and file patterns limmit examination targets) | ||||
$ hg debugpickmergetool -X f | ||||
$ hg debugpickmergetool unknown | ||||
unknown: no such file in rev ef83787e2614 | ||||
(--changedelete emulates merging change and delete) | ||||
$ hg debugpickmergetool --changedelete | ||||
f = :prompt | ||||
(-r REV causes checking files in specified revision) | ||||
$ hg manifest -r tip | ||||
f.txt | ||||
$ hg debugpickmergetool -r tip | ||||
f.txt = true | ||||
#if symlink | ||||
(symlink causes chosing :prompt) | ||||
$ hg debugpickmergetool -r 6d00b3726f6e | ||||
f = :prompt | ||||
#endif | ||||
(--verbose shows some configurations) | ||||
$ hg debugpickmergetool --tool foobar -v | ||||
with --tool 'foobar' | ||||
f = foobar | ||||
$ HGMERGE=false hg debugpickmergetool -v | ||||
with HGMERGE='false' | ||||
f = false | ||||
$ hg debugpickmergetool --config ui.merge=false -v | ||||
with ui.merge='false' | ||||
f = false | ||||
(--debug shows errors detected intermediately) | ||||
$ hg debugpickmergetool --config merge-patterns.f=true --config merge-tools.true.executable=nonexistentmergetool --debug f | ||||
couldn't find merge tool true (for pattern f) | ||||
couldn't find merge tool true | ||||
f = false | ||||