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