1#!/bin/sh 2# git-difftool--helper is a GIT_EXTERNAL_DIFF-compatible diff tool launcher. 3# This script is typically launched by using the 'git difftool' 4# convenience command. 5# 6# Copyright (c) 2009, 2010 David Aguilar 7 8TOOL_MODE=diff 9. git-mergetool--lib 10 11# difftool.prompt controls the default prompt/no-prompt behavior 12# and is overridden with $GIT_DIFFTOOL*_PROMPT. 13should_prompt () { 14 prompt_merge=$(git config --bool mergetool.prompt || echo true) 15 prompt=$(git config --bool difftool.prompt || echo $prompt_merge) 16iftest"$prompt"= true 17then 18test -z"$GIT_DIFFTOOL_NO_PROMPT" 19else 20test -n"$GIT_DIFFTOOL_PROMPT" 21fi 22} 23 24# Indicates that --extcmd=... was specified 25use_ext_cmd () { 26test -n"$GIT_DIFFTOOL_EXTCMD" 27} 28 29launch_merge_tool () { 30# Merged is the filename as it appears in the work tree 31# Local is the contents of a/filename 32# Remote is the contents of b/filename 33# Custom merge tool commands might use $BASE so we provide it 34 MERGED="$1" 35 LOCAL="$2" 36 REMOTE="$3" 37 BASE="$1" 38 39# $LOCAL and $REMOTE are temporary files so prompt 40# the user with the real $MERGED name before launching $merge_tool. 41if should_prompt 42then 43printf"\nViewing (%s/%s): '%s'\n""$GIT_DIFF_PATH_COUNTER" \ 44"$GIT_DIFF_PATH_TOTAL""$MERGED" 45if use_ext_cmd 46then 47printf"Launch '%s' [Y/n]: " \ 48"$GIT_DIFFTOOL_EXTCMD" 49else 50printf"Launch '%s' [Y/n]: ""$merge_tool" 51fi 52ifread ans &&test"$ans"= n 53then 54return 55fi 56fi 57 58if use_ext_cmd 59then 60export BASE 61eval$GIT_DIFFTOOL_EXTCMD'"$LOCAL"''"$REMOTE"' 62else 63 run_merge_tool "$merge_tool" 64fi 65} 66 67if! use_ext_cmd 68then 69iftest -n"$GIT_DIFF_TOOL" 70then 71 merge_tool="$GIT_DIFF_TOOL" 72else 73 merge_tool="$(get_merge_tool)"||exit 74fi 75fi 76 77iftest -n"$GIT_DIFFTOOL_DIRDIFF" 78then 79 LOCAL="$1" 80 REMOTE="$2" 81 run_merge_tool "$merge_tool" false 82else 83# Launch the merge tool on each path provided by 'git diff' 84whiletest$#-gt6 85do 86 launch_merge_tool "$1""$2""$5" 87shift7 88done 89fi