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