Merge branch 'pb/mergetool-errors'
End-user experience of "git mergetool" when the command errors out has been improved. * pb/mergetool-errors: git-difftool--helper.sh: exit upon initialize_merge_tool errors git-mergetool--lib.sh: add error message for unknown tool variant git-mergetool--lib.sh: add error message if 'setup_user_tool' fails git-mergetool--lib.sh: use TOOL_MODE when erroring about unknown tool completion: complete '--tool-help' in 'git mergetool'
This commit is contained in:
@ -2331,7 +2331,7 @@ _git_mergetool ()
|
||||
return
|
||||
;;
|
||||
--*)
|
||||
__gitcomp "--tool= --prompt --no-prompt --gui --no-gui"
|
||||
__gitcomp "--tool= --tool-help --prompt --no-prompt --gui --no-gui"
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
@ -61,9 +61,7 @@ launch_merge_tool () {
|
||||
export BASE
|
||||
eval $GIT_DIFFTOOL_EXTCMD '"$LOCAL"' '"$REMOTE"'
|
||||
else
|
||||
initialize_merge_tool "$merge_tool"
|
||||
# ignore the error from the above --- run_merge_tool
|
||||
# will diagnose unusable tool by itself
|
||||
initialize_merge_tool "$merge_tool" || exit 1
|
||||
run_merge_tool "$merge_tool"
|
||||
fi
|
||||
}
|
||||
@ -87,9 +85,7 @@ if test -n "$GIT_DIFFTOOL_DIRDIFF"
|
||||
then
|
||||
LOCAL="$1"
|
||||
REMOTE="$2"
|
||||
initialize_merge_tool "$merge_tool"
|
||||
# ignore the error from the above --- run_merge_tool
|
||||
# will diagnose unusable tool by itself
|
||||
initialize_merge_tool "$merge_tool" || exit 1
|
||||
run_merge_tool "$merge_tool" false
|
||||
|
||||
status=$?
|
||||
|
@ -159,7 +159,7 @@ check_unchanged () {
|
||||
}
|
||||
|
||||
valid_tool () {
|
||||
setup_tool "$1" && return 0
|
||||
setup_tool "$1" 2>/dev/null && return 0
|
||||
cmd=$(get_merge_tool_cmd "$1")
|
||||
test -n "$cmd"
|
||||
}
|
||||
@ -250,7 +250,12 @@ setup_tool () {
|
||||
. "$MERGE_TOOLS_DIR/${tool%[0-9]}"
|
||||
else
|
||||
setup_user_tool
|
||||
return $?
|
||||
rc=$?
|
||||
if test $rc -ne 0
|
||||
then
|
||||
echo >&2 "error: ${TOOL_MODE}tool.$tool.cmd not set for tool '$tool'"
|
||||
fi
|
||||
return $rc
|
||||
fi
|
||||
|
||||
# Now let the user override the default command for the tool. If
|
||||
@ -259,6 +264,7 @@ setup_tool () {
|
||||
|
||||
if ! list_tool_variants | grep -q "^$tool$"
|
||||
then
|
||||
echo "error: unknown tool variant '$tool'" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
@ -474,7 +480,7 @@ get_merge_tool_path () {
|
||||
merge_tool="$1"
|
||||
if ! valid_tool "$merge_tool"
|
||||
then
|
||||
echo >&2 "Unknown merge tool $merge_tool"
|
||||
echo >&2 "Unknown $TOOL_MODE tool $merge_tool"
|
||||
exit 1
|
||||
fi
|
||||
if diff_mode
|
||||
|
@ -898,4 +898,12 @@ test_expect_success 'mergetool with guiDefault' '
|
||||
git commit -m "branch1 resolved with mergetool"
|
||||
'
|
||||
|
||||
test_expect_success 'mergetool with non-existent tool' '
|
||||
test_when_finished "git reset --hard" &&
|
||||
git checkout -b test$test_count branch1 &&
|
||||
test_must_fail git merge main &&
|
||||
yes "" | test_must_fail git mergetool --tool=absent >out 2>&1 &&
|
||||
test_grep "mergetool.absent.cmd not set for tool" out
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user