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 52export BASE 53eval$GIT_DIFFTOOL_EXTCMD'"$LOCAL"''"$REMOTE"' 54else 55 run_merge_tool "$merge_tool" 56fi 57} 58 59if! use_ext_cmd;then 60iftest -n"$GIT_DIFF_TOOL";then 61 merge_tool="$GIT_DIFF_TOOL" 62else 63 merge_tool="$(get_merge_tool)"||exit 64fi 65fi 66 67# Launch the merge tool on each path provided by 'git diff' 68whiletest$#-gt6 69do 70 launch_merge_tool "$1""$2""$5" 71shift7 72done