config: add `git_die_config()` to the config-set API
[gitweb.git] / git-mergetool.sh
index 012afa55494cc968831b8115f9e2956f107bbb45..9a046b75d1dd810202d784d3fffe8afe6dd1963c 100755 (executable)
@@ -205,7 +205,7 @@ checkout_staged_file () {
                "$(git checkout-index --temp --stage="$1" "$2" 2>/dev/null)" \
                : '\([^ ]*\)    ')
 
-       if test $? -eq 0 -a -n "$tmpfile"
+       if test $? -eq 0 && test -n "$tmpfile"
        then
                mv -- "$(git rev-parse --show-cdup)$tmpfile" "$3"
        else
@@ -256,7 +256,7 @@ merge_file () {
        checkout_staged_file 2 "$MERGED" "$LOCAL"
        checkout_staged_file 3 "$MERGED" "$REMOTE"
 
-       if test -z "$local_mode" -o -z "$remote_mode"
+       if test -z "$local_mode" || test -z "$remote_mode"
        then
                echo "Deleted merge conflict for '$MERGED':"
                describe_file "$local_mode" "local" "$LOCAL"
@@ -277,7 +277,7 @@ merge_file () {
        echo "Normal merge conflict for '$MERGED':"
        describe_file "$local_mode" "local" "$LOCAL"
        describe_file "$remote_mode" "remote" "$REMOTE"
-       if "$prompt" = true
+       if test "$guessed_merge_tool" = true || test "$prompt" = true
        then
                printf "Hit return to start merge resolution tool (%s): " "$merge_tool"
                read ans || return 1
@@ -315,44 +315,8 @@ merge_file () {
        return 0
 }
 
-show_tool_help () {
-       TOOL_MODE=merge
-       list_merge_tool_candidates
-       unavailable= available= LF='
-'
-       for i in $tools
-       do
-               merge_tool_path=$(translate_merge_tool_path "$i")
-               if type "$merge_tool_path" >/dev/null 2>&1
-               then
-                       available="$available$i$LF"
-               else
-                       unavailable="$unavailable$i$LF"
-               fi
-       done
-       if test -n "$available"
-       then
-               echo "'git mergetool --tool=<tool>' may be set to one of the following:"
-               echo "$available" | sort | sed -e 's/^/ /'
-       else
-               echo "No suitable tool for 'git mergetool --tool=<tool>' found."
-       fi
-       if test -n "$unavailable"
-       then
-               echo
-               echo 'The following tools are valid, but not currently available:'
-               echo "$unavailable" | sort | sed -e 's/^/       /'
-       fi
-       if test -n "$unavailable$available"
-       then
-               echo
-               echo "Some of the tools listed above only work in a windowed"
-               echo "environment. If run in a terminal-only session, they will fail."
-       fi
-       exit 0
-}
-
-prompt=$(git config --bool mergetool.prompt || echo true)
+prompt=$(git config --bool mergetool.prompt)
+guessed_merge_tool=false
 
 while test $# != 0
 do
@@ -410,7 +374,14 @@ prompt_after_failed_merge () {
 
 if test -z "$merge_tool"
 then
-       merge_tool=$(get_merge_tool "$merge_tool") || exit
+       # Check if a merge tool has been configured
+       merge_tool=$(get_configured_merge_tool)
+       # Try to guess an appropriate merge tool if no tool has been set.
+       if test -z "$merge_tool"
+       then
+               merge_tool=$(guess_merge_tool) || exit
+               guessed_merge_tool=true
+       fi
 fi
 merge_keep_backup="$(git config --bool mergetool.keepBackup || echo true)"
 merge_keep_temporaries="$(git config --bool mergetool.keepTemporaries || echo false)"