summaryrefslogtreecommitdiff
path: root/tests/test-merge-tools.t
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-merge-tools.t')
-rw-r--r--tests/test-merge-tools.t288
1 files changed, 130 insertions, 158 deletions
diff --git a/tests/test-merge-tools.t b/tests/test-merge-tools.t
index cee56cd..b143be4 100644
--- a/tests/test-merge-tools.t
+++ b/tests/test-merge-tools.t
@@ -31,7 +31,8 @@ revision 3 - simple to merge
$ hg commit -Am "revision 3"
created new head
$ echo "[merge-tools]" > .hg/hgrc
-
+ $ echo
+
$ beforemerge() {
> cat .hg/hgrc
> echo "# hg update -C 1"
@@ -43,10 +44,22 @@ revision 3 - simple to merge
> echo "# hg stat"
> hg stat
> rm -f f.orig
+ > echo
+ > }
+ $ domerge() {
+ > beforemerge
+ > echo "# hg merge $*"
+ > hg merge $*
+ > aftermerge
> }
+ $ echo
+
Tool selection
+ $ echo
+
+
default is internal merge:
$ beforemerge
@@ -60,7 +73,7 @@ running from a devel copy, not a temp installation
$ PATH="$BINDIR" $PYTHON "$BINDIR"/hg merge -r 2
merging f
warning: conflicts during merge.
- merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
+ 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
[1]
@@ -75,167 +88,137 @@ running from a devel copy, not a temp installation
# hg stat
M f
? f.orig
+
simplest hgrc using false for merge:
$ echo "false.whatever=" >> .hg/hgrc
- $ beforemerge
+ $ domerge -r 2
[merge-tools]
false.whatever=
# hg update -C 1
- $ hg merge -r 2
+ # hg merge -r 2
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
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
-
-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
+
true with higher .priority gets precedence:
$ echo "true.priority=1" >> .hg/hgrc
- $ beforemerge
+ $ domerge -r 2
[merge-tools]
false.whatever=
true.priority=1
# hg update -C 1
- $ hg merge -r 2
+ # hg merge -r 2
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
# hg stat
M f
+
unless lowered on command line:
- $ beforemerge
+ $ domerge -r 2 --config merge-tools.true.priority=-7
[merge-tools]
false.whatever=
true.priority=1
# hg update -C 1
- $ hg merge -r 2 --config merge-tools.true.priority=-7
+ # hg merge -r 2 --config merge-tools.true.priority=-7
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
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
+
or false set higher on command line:
- $ beforemerge
+ $ domerge -r 2 --config merge-tools.false.priority=117
[merge-tools]
false.whatever=
true.priority=1
# hg update -C 1
- $ hg merge -r 2 --config merge-tools.false.priority=117
+ # hg merge -r 2 --config merge-tools.false.priority=117
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
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
+
or true.executable not found in PATH:
- $ beforemerge
+ $ domerge -r 2 --config merge-tools.true.executable=nonexistingmergetool
[merge-tools]
false.whatever=
true.priority=1
# hg update -C 1
- $ hg merge -r 2 --config merge-tools.true.executable=nonexistingmergetool
+ # hg merge -r 2 --config merge-tools.true.executable=nonexistingmergetool
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
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
+
or true.executable with bogus path:
- $ beforemerge
+ $ domerge -r 2 --config merge-tools.true.executable=/nonexisting/mergetool
[merge-tools]
false.whatever=
true.priority=1
# hg update -C 1
- $ hg merge -r 2 --config merge-tools.true.executable=/nonexisting/mergetool
+ # hg merge -r 2 --config merge-tools.true.executable=/nonexisting/mergetool
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
- [1]
- $ aftermerge
# 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
- $ beforemerge
+ $ domerge -r 2
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2
+ # hg merge -r 2
merging f
revision 1
space
@@ -245,22 +228,22 @@ but true.executable set to cat found in PATH works:
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
+
and true.executable set to cat with path works:
- $ beforemerge
+ $ domerge -r 2 --config merge-tools.true.executable=cat
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config merge-tools.true.executable=cat
+ # hg merge -r 2 --config merge-tools.true.executable=cat
merging f
revision 1
space
@@ -270,223 +253,199 @@ and true.executable set to cat with path works:
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
-
-#if unix-permissions
-
-environment variables in true.executable are handled:
-
- $ echo 'echo "custom merge tool"' > "$HGTMP/merge.sh"
- $ beforemerge
- [merge-tools]
- false.whatever=
- true.priority=1
- true.executable=cat
- # hg update -C 1
- $ hg --config merge-tools.true.executable='sh' \
- > --config merge-tools.true.args="$HGTMP/merge.sh" \
- > merge -r 2
- merging f
- custom merge tool
- 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
-
-#endif
+
+ $ echo
+
Tool selection and merge-patterns
+ $ echo
+
+
merge-patterns specifies new tool false:
- $ beforemerge
+ $ domerge -r 2 --config merge-patterns.f=false
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config merge-patterns.f=false
+ # hg merge -r 2 --config merge-patterns.f=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 or 'hg update -C .' to abandon
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
+
merge-patterns specifies executable not found in PATH and gets warning:
- $ beforemerge
+ $ domerge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=nonexistingmergetool
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=nonexistingmergetool
+ # hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=nonexistingmergetool
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
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
+
merge-patterns specifies executable with bogus path and gets warning:
- $ beforemerge
+ $ domerge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/nonexisting/mergetool
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/nonexisting/mergetool
+ # hg merge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/nonexisting/mergetool
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
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
+
+ $ echo
+
ui.merge overrules priority
+ $ echo
+
+
ui.merge specifies false:
- $ beforemerge
+ $ domerge -r 2 --config ui.merge=false
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config ui.merge=false
+ # hg merge -r 2 --config ui.merge=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 or 'hg update -C .' to abandon
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
+
ui.merge specifies internal:fail:
- $ beforemerge
+ $ domerge -r 2 --config ui.merge=internal:fail
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config ui.merge=internal:fail
+ # hg merge -r 2 --config ui.merge=internal:fail
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
revision 1
space
# hg stat
M f
+
ui.merge specifies internal:local:
- $ beforemerge
+ $ domerge -r 2 --config ui.merge=internal:local
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config ui.merge=internal:local
+ # hg merge -r 2 --config ui.merge=internal:local
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
+
ui.merge specifies internal:other:
- $ beforemerge
+ $ domerge -r 2 --config ui.merge=internal:other
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config ui.merge=internal:other
+ # hg merge -r 2 --config ui.merge=internal:other
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
- $ aftermerge
# cat f
revision 2
space
# hg stat
M f
+
ui.merge specifies internal:prompt:
- $ beforemerge
+ $ domerge -r 2 --config ui.merge=internal:prompt
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config ui.merge=internal:prompt
+ # hg merge -r 2 --config ui.merge=internal:prompt
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)
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
+
ui.merge specifies internal:dump:
- $ beforemerge
+ $ domerge -r 2 --config ui.merge=internal:dump
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config ui.merge=internal:dump
+ # hg merge -r 2 --config ui.merge=internal:dump
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
- [1]
- $ aftermerge
# cat f
revision 1
space
@@ -496,6 +455,7 @@ ui.merge specifies internal:dump:
? f.local
? f.orig
? f.other
+
f.base:
@@ -515,127 +475,129 @@ f.other:
revision 2
space
$ rm f.base f.local f.other
+ $ echo
+
ui.merge specifies internal:other but is overruled by pattern for false:
- $ beforemerge
+ $ domerge -r 2 --config ui.merge=internal:other --config merge-patterns.f=false
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config ui.merge=internal:other --config merge-patterns.f=false
+ # hg merge -r 2 --config ui.merge=internal:other --config merge-patterns.f=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 or 'hg update -C .' to abandon
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
+
+ $ echo
+
Premerge
+ $ echo
+
+
ui.merge specifies internal:other but is overruled by --tool=false
- $ beforemerge
+ $ domerge -r 2 --config ui.merge=internal:other --tool=false
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --config ui.merge=internal:other --tool=false
+ # hg merge -r 2 --config ui.merge=internal:other --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 or 'hg update -C .' to abandon
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
-
+
HGMERGE specifies internal:other but is overruled by --tool=false
$ HGMERGE=internal:other ; export HGMERGE
- $ beforemerge
+ $ domerge -r 2 --tool=false
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 2 --tool=false
+ # hg merge -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 or 'hg update -C .' to abandon
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
-
+
$ unset HGMERGE # make sure HGMERGE doesn't interfere with remaining tests
Default is silent simplemerge:
- $ beforemerge
+ $ domerge -r 3
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 3
+ # hg merge -r 3
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
+
.premerge=True is same:
- $ beforemerge
+ $ domerge -r 3 --config merge-tools.true.premerge=True
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 3 --config merge-tools.true.premerge=True
+ # hg merge -r 3 --config merge-tools.true.premerge=True
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
+
.premerge=False executes merge-tool:
- $ beforemerge
+ $ domerge -r 3 --config merge-tools.true.premerge=False
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -r 3 --config merge-tools.true.premerge=False
+ # hg merge -r 3 --config merge-tools.true.premerge=False
merging f
revision 1
space
@@ -646,17 +608,21 @@ Default is silent simplemerge:
revision 3
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
+
+ $ echo
+
Tool execution
-set tools.args explicit to include $base $local $other $output:
-
+ $ echo
+
+ $ echo '# set tools.args explicit to include $base $local $other $output:' # default '$local $base $other'
+ # set tools.args explicit to include $base $local $other $output:
$ beforemerge
[merge-tools]
false.whatever=
@@ -689,9 +655,9 @@ set tools.args explicit to include $base $local $other $output:
space
# hg stat
M f
-
-Merge with "echo mergeresult > $local":
-
+
+ $ echo '# Merge with "echo mergeresult > $local":'
+ # Merge with "echo mergeresult > $local":
$ beforemerge
[merge-tools]
false.whatever=
@@ -707,9 +673,9 @@ Merge with "echo mergeresult > $local":
mergeresult
# hg stat
M f
-
-- and $local is the file f:
-
+
+ $ echo '# - and $local is the file f:'
+ # - and $local is the file f:
$ beforemerge
[merge-tools]
false.whatever=
@@ -725,9 +691,9 @@ Merge with "echo mergeresult > $local":
mergeresult
# hg stat
M f
-
-Merge with "echo mergeresult > $output" - the variable is a bit magic:
-
+
+ $ echo '# Merge with "echo mergeresult > $output" - the variable is a bit magic:'
+ # Merge with "echo mergeresult > $output" - the variable is a bit magic:
$ beforemerge
[merge-tools]
false.whatever=
@@ -743,6 +709,7 @@ Merge with "echo mergeresult > $output" - the variable is a bit magic:
mergeresult
# hg stat
M f
+
Merge using tool with a path that must be quoted:
@@ -753,11 +720,11 @@ Merge using tool with a path that must be quoted:
true.executable=cat
# hg update -C 1
$ cat <<EOF > 'my merge tool'
+ > #!/bin/sh
> cat "\$1" "\$2" "\$3" > "\$4"
> EOF
- $ hg --config merge-tools.true.executable='sh' \
- > --config merge-tools.true.args='"./my merge tool" $base $local $other $output' \
- > merge -r 2
+ $ 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'
merging f
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
@@ -772,18 +739,24 @@ Merge using tool with a path that must be quoted:
space
# hg stat
M f
+
+ $ echo
+
Merge post-processing
+ $ echo
+
+
cat is a bad merge-tool and doesn't change:
- $ beforemerge
+ $ domerge -y -r 2 --config merge-tools.true.checkchanged=1
[merge-tools]
false.whatever=
true.priority=1
true.executable=cat
# hg update -C 1
- $ hg merge -y -r 2 --config merge-tools.true.checkchanged=1
+ # hg merge -y -r 2 --config merge-tools.true.checkchanged=1
merging f
revision 1
space
@@ -796,11 +769,10 @@ cat is a bad merge-tool and doesn't change:
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
- [1]
- $ aftermerge
# cat f
revision 1
space
# hg stat
M f
? f.orig
+