Demonstrate git-show is broken with ranges
[gitweb.git] / git-difftool--helper.sh
index 57e8e3256d7b6578cda37815163d8945431aa6db..e6558d101062929241cc30cd0272556c3164310b 100755 (executable)
@@ -3,24 +3,29 @@
 # This script is typically launched by using the 'git difftool'
 # convenience command.
 #
-# Copyright (c) 2009 David Aguilar
+# Copyright (c) 2009, 2010 David Aguilar
 
-# Load common functions from git-mergetool--lib
 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=$(git config --bool difftool.prompt || echo true)
-       if test "$prompt" = true; then
+       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
 }
 
-# Sets up shell variables and runs a merge tool
+# 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,22 +38,39 @@ launch_merge_tool () {
 
        # $LOCAL and $REMOTE are temporary files so prompt
        # the user with the real $MERGED name before launching $merge_tool.
-       if should_prompt; then
+       if should_prompt
+       then
                printf "\nViewing: '$MERGED'\n"
-               printf "Hit return to launch '%s': " "$merge_tool"
-               read ans
+               if use_ext_cmd
+               then
+                       printf "Launch '%s' [Y/n]: " \
+                               "$GIT_DIFFTOOL_EXTCMD"
+               else
+                       printf "Launch '%s' [Y/n]: " "$merge_tool"
+               fi
+               if read ans && test "$ans" = n
+               then
+                       return
+               fi
        fi
 
-       # Run the appropriate merge tool command
-       run_merge_tool "$merge_tool"
+       if use_ext_cmd
+       then
+               export BASE
+               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'