cce076e371
Every yes/no question in difftool/mergetool scripts has slightly different form, and none of them is consistent with the form git itself uses. Make the form of all the questions consistent with the form used by git. Reviewed-by: John Keeping <john@keeping.me.uk> Signed-off-by: Nikola Forró <nforro@redhat.com> Acked-by: David Aguilar <davvid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
99 lines
2.1 KiB
Bash
Executable File
99 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# git-difftool--helper is a GIT_EXTERNAL_DIFF-compatible diff tool launcher.
|
|
# This script is typically launched by using the 'git difftool'
|
|
# convenience command.
|
|
#
|
|
# Copyright (c) 2009, 2010 David Aguilar
|
|
|
|
TOOL_MODE=diff
|
|
. git-mergetool--lib
|
|
|
|
# difftool.prompt controls the default prompt/no-prompt behavior
|
|
# and is overridden with $GIT_DIFFTOOL*_PROMPT.
|
|
should_prompt () {
|
|
prompt_merge=$(git config --bool mergetool.prompt || echo true)
|
|
prompt=$(git config --bool difftool.prompt || echo $prompt_merge)
|
|
if test "$prompt" = true
|
|
then
|
|
test -z "$GIT_DIFFTOOL_NO_PROMPT"
|
|
else
|
|
test -n "$GIT_DIFFTOOL_PROMPT"
|
|
fi
|
|
}
|
|
|
|
# Indicates that --extcmd=... was specified
|
|
use_ext_cmd () {
|
|
test -n "$GIT_DIFFTOOL_EXTCMD"
|
|
}
|
|
|
|
launch_merge_tool () {
|
|
# Merged is the filename as it appears in the work tree
|
|
# Local is the contents of a/filename
|
|
# Remote is the contents of b/filename
|
|
# Custom merge tool commands might use $BASE so we provide it
|
|
MERGED="$1"
|
|
LOCAL="$2"
|
|
REMOTE="$3"
|
|
BASE="$1"
|
|
|
|
# $LOCAL and $REMOTE are temporary files so prompt
|
|
# the user with the real $MERGED name before launching $merge_tool.
|
|
if should_prompt
|
|
then
|
|
printf "\nViewing (%s/%s): '%s'\n" "$GIT_DIFF_PATH_COUNTER" \
|
|
"$GIT_DIFF_PATH_TOTAL" "$MERGED"
|
|
if use_ext_cmd
|
|
then
|
|
printf "Launch '%s' [Y/n]? " \
|
|
"$GIT_DIFFTOOL_EXTCMD"
|
|
else
|
|
printf "Launch '%s' [Y/n]? " "$merge_tool"
|
|
fi
|
|
read ans || return
|
|
if test "$ans" = n
|
|
then
|
|
return
|
|
fi
|
|
fi
|
|
|
|
if use_ext_cmd
|
|
then
|
|
export BASE
|
|
eval $GIT_DIFFTOOL_EXTCMD '"$LOCAL"' '"$REMOTE"'
|
|
else
|
|
run_merge_tool "$merge_tool"
|
|
fi
|
|
}
|
|
|
|
if ! use_ext_cmd
|
|
then
|
|
if test -n "$GIT_DIFF_TOOL"
|
|
then
|
|
merge_tool="$GIT_DIFF_TOOL"
|
|
else
|
|
merge_tool="$(get_merge_tool)" || exit
|
|
fi
|
|
fi
|
|
|
|
if test -n "$GIT_DIFFTOOL_DIRDIFF"
|
|
then
|
|
LOCAL="$1"
|
|
REMOTE="$2"
|
|
run_merge_tool "$merge_tool" false
|
|
else
|
|
# Launch the merge tool on each path provided by 'git diff'
|
|
while test $# -gt 6
|
|
do
|
|
launch_merge_tool "$1" "$2" "$5"
|
|
status=$?
|
|
if test "$status" != 0 &&
|
|
test "$GIT_DIFFTOOL_TRUST_EXIT_CODE" = true
|
|
then
|
|
exit $status
|
|
fi
|
|
shift 7
|
|
done
|
|
fi
|
|
|
|
exit 0
|