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