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;then 17test -z"$GIT_DIFFTOOL_NO_PROMPT" 18else 19test -n"$GIT_DIFFTOOL_PROMPT" 20fi 21} 22 23# Indicates that --extcmd=... was specified 24use_ext_cmd () { 25test -n"$GIT_DIFFTOOL_EXTCMD" 26} 27 28launch_merge_tool () { 29# Merged is the filename as it appears in the work tree 30# Local is the contents of a/filename 31# Remote is the contents of b/filename 32# Custom merge tool commands might use $BASE so we provide it 33 MERGED="$1" 34 LOCAL="$2" 35 REMOTE="$3" 36 BASE="$1" 37 38# $LOCAL and $REMOTE are temporary files so prompt 39# the user with the real $MERGED name before launching $merge_tool. 40if should_prompt;then 41printf"\nViewing: '$MERGED'\n" 42if use_ext_cmd;then 43printf"Hit return to launch '%s': " \ 44"$GIT_DIFFTOOL_EXTCMD" 45else 46printf"Hit return to launch '%s': ""$merge_tool" 47fi 48read ans 49fi 50 51if use_ext_cmd;then 52eval$GIT_DIFFTOOL_EXTCMD'"$LOCAL"''"$REMOTE"' 53else 54 run_merge_tool "$merge_tool" 55fi 56} 57 58if! use_ext_cmd;then 59iftest -n"$GIT_DIFF_TOOL";then 60 merge_tool="$GIT_DIFF_TOOL" 61else 62 merge_tool="$(get_merge_tool)"||exit 63fi 64fi 65 66# Launch the merge tool on each path provided by 'git diff' 67whiletest$#-gt6 68do 69 launch_merge_tool "$1""$2""$5" 70shift7 71done