diff options
Diffstat (limited to 'tests/test-merge-tools.t')
-rw-r--r-- | tests/test-merge-tools.t | 288 |
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 + |