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'\n""$MERGED" 44if use_ext_cmd 45then 46printf"Launch '%s' [Y/n]: " \ 47"$GIT_DIFFTOOL_EXTCMD" 48else 49printf"Launch '%s' [Y/n]: ""$merge_tool" 50fi 51ifread ans &&test"$ans"= n 52then 53return 54fi 55fi 56 57if use_ext_cmd 58then 59export BASE 60eval$GIT_DIFFTOOL_EXTCMD'"$LOCAL"''"$REMOTE"' 61else 62 run_merge_tool "$merge_tool" 63fi 64} 65 66if! use_ext_cmd 67then 68iftest -n"$GIT_DIFF_TOOL" 69then 70 merge_tool="$GIT_DIFF_TOOL" 71else 72 merge_tool="$(get_merge_tool)"||exit 73fi 74fi 75 76iftest -n"$GIT_DIFFTOOL_DIRDIFF" 77then 78 LOCAL="$1" 79 REMOTE="$2" 80 run_merge_tool "$merge_tool" false 81else 82# Launch the merge tool on each path provided by 'git diff' 83whiletest$#-gt6 84do 85 launch_merge_tool "$1""$2""$5" 86shift7 87done 88fi