X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=git-difftool--helper.sh;h=524f5ea8ab14bb44e5a8e6393e40c0ec5c1ddaa2;hb=a81f1a825bebe1b4d202832b804957d1547d7f60;hp=1b138083d3642af596fe56a74c4f98321e6135fc;hpb=db367136605868f5971d42501a48820ccdcb8b08;p=git.git diff --git a/git-difftool--helper.sh b/git-difftool--helper.sh index 1b138083d..524f5ea8a 100755 --- a/git-difftool--helper.sh +++ b/git-difftool--helper.sh @@ -3,7 +3,7 @@ # This script is typically launched by using the 'git difftool' # convenience command. # -# Copyright (c) 2009-2010 David Aguilar +# Copyright (c) 2009, 2010 David Aguilar TOOL_MODE=diff . git-mergetool--lib @@ -11,7 +11,8 @@ TOOL_MODE=diff # difftool.prompt controls the default prompt/no-prompt behavior # and is overridden with $GIT_DIFFTOOL*_PROMPT. should_prompt () { - prompt=$(git config --bool difftool.prompt || echo true) + 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 @@ -19,6 +20,11 @@ should_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 @@ -33,19 +39,28 @@ launch_merge_tool () { # the user with the real $MERGED name before launching $merge_tool. if should_prompt; then printf "\nViewing: '$MERGED'\n" - printf "Hit return to launch '%s': " "$merge_tool" + if use_ext_cmd; then + printf "Hit return to launch '%s': " \ + "$GIT_DIFFTOOL_EXTCMD" + else + printf "Hit return to launch '%s': " "$merge_tool" + fi read ans fi - run_merge_tool "$merge_tool" + if use_ext_cmd; then + eval $GIT_DIFFTOOL_EXTCMD '"$LOCAL"' '"$REMOTE"' + else + run_merge_tool "$merge_tool" + fi } -# Allow GIT_DIFF_TOOL and GIT_MERGE_TOOL to provide default values -test -n "$GIT_MERGE_TOOL" && merge_tool="$GIT_MERGE_TOOL" -test -n "$GIT_DIFF_TOOL" && merge_tool="$GIT_DIFF_TOOL" - -if test -z "$merge_tool"; then - merge_tool="$(get_merge_tool)" || exit +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 # Launch the merge tool on each path provided by 'git diff'