123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #!/bin/sh
- # git-difftool--helper is a GIT_EXTERNAL_DIFF-compatible diff tool launcher.
- # This script is typically launched by using the 'git difftool'
- # convenience command.
- #
- # Copyright (c) 2009, 2010 David Aguilar
- TOOL_MODE=diff
- . git-mergetool--lib
- # difftool.prompt controls the default prompt/no-prompt behavior
- # and is overridden with $GIT_DIFFTOOL*_PROMPT.
- should_prompt () {
- prompt_merge=$(git config --bool mergetool.prompt || echo true)
- prompt=$(git config --bool difftool.prompt || echo $prompt_merge)
- if test "$prompt" = true
- then
- test -z "$GIT_DIFFTOOL_NO_PROMPT"
- else
- test -n "$GIT_DIFFTOOL_PROMPT"
- fi
- }
- # Indicates that --extcmd=... was specified
- use_ext_cmd () {
- test -n "$GIT_DIFFTOOL_EXTCMD"
- }
- launch_merge_tool () {
- # Merged is the filename as it appears in the work tree
- # Local is the contents of a/filename
- # Remote is the contents of b/filename
- # Custom merge tool commands might use $BASE so we provide it
- MERGED="$1"
- LOCAL="$2"
- REMOTE="$3"
- BASE="$1"
- # $LOCAL and $REMOTE are temporary files so prompt
- # the user with the real $MERGED name before launching $merge_tool.
- if should_prompt
- then
- printf "\nViewing (%s/%s): '%s'\n" "$GIT_DIFF_PATH_COUNTER" \
- "$GIT_DIFF_PATH_TOTAL" "$MERGED"
- if use_ext_cmd
- then
- printf "Launch '%s' [Y/n]? " \
- "$GIT_DIFFTOOL_EXTCMD"
- else
- printf "Launch '%s' [Y/n]? " "$merge_tool"
- fi
- read ans || return
- if test "$ans" = n
- then
- return
- fi
- fi
- if use_ext_cmd
- then
- export BASE
- eval $GIT_DIFFTOOL_EXTCMD '"$LOCAL"' '"$REMOTE"'
- else
- run_merge_tool "$merge_tool"
- fi
- }
- if ! use_ext_cmd
- then
- if test -n "$GIT_DIFF_TOOL"
- then
- merge_tool="$GIT_DIFF_TOOL"
- else
- merge_tool="$(get_merge_tool)"
- fi
- fi
- if test -n "$GIT_DIFFTOOL_DIRDIFF"
- then
- LOCAL="$1"
- REMOTE="$2"
- run_merge_tool "$merge_tool" false
- else
- # Launch the merge tool on each path provided by 'git diff'
- while test $# -gt 6
- do
- launch_merge_tool "$1" "$2" "$5"
- status=$?
- if test $status -ge 126
- then
- # Command not found (127), not executable (126) or
- # exited via a signal (>= 128).
- exit $status
- fi
- if test "$status" != 0 &&
- test "$GIT_DIFFTOOL_TRUST_EXIT_CODE" = true
- then
- exit $status
- fi
- shift 7
- done
- fi
- exit 0
|