]>
Commit | Line | Data |
---|---|---|
5c38ea31 | 1 | #!/bin/sh |
afcbc8e7 | 2 | # git-difftool--helper is a GIT_EXTERNAL_DIFF-compatible diff tool launcher. |
5c38ea31 DA |
3 | # This script is typically launched by using the 'git difftool' |
4 | # convenience command. | |
5 | # | |
c8a5672e | 6 | # Copyright (c) 2009, 2010 David Aguilar |
5c38ea31 | 7 | |
21d0ba7e DA |
8 | TOOL_MODE=diff |
9 | . git-mergetool--lib | |
10 | ||
a904392e DA |
11 | # difftool.prompt controls the default prompt/no-prompt behavior |
12 | # and is overridden with $GIT_DIFFTOOL*_PROMPT. | |
5c38ea31 | 13 | should_prompt () { |
4cacc621 SS |
14 | prompt_merge=$(git config --bool mergetool.prompt || echo true) |
15 | prompt=$(git config --bool difftool.prompt || echo $prompt_merge) | |
a904392e DA |
16 | if test "$prompt" = true; then |
17 | test -z "$GIT_DIFFTOOL_NO_PROMPT" | |
18 | else | |
19 | test -n "$GIT_DIFFTOOL_PROMPT" | |
20 | fi | |
5c38ea31 DA |
21 | } |
22 | ||
1c6f5b52 DA |
23 | # Indicates that --extcmd=... was specified |
24 | use_ext_cmd () { | |
25 | test -n "$GIT_DIFFTOOL_EXTCMD" | |
26 | } | |
27 | ||
5c38ea31 DA |
28 | launch_merge_tool () { |
29 | # Merged is the filename as it appears in the work tree | |
30 | # Local is the contents of a/filename | |
31 | # Remote is the contents of b/filename | |
32 | # Custom merge tool commands might use $BASE so we provide it | |
33 | MERGED="$1" | |
34 | LOCAL="$2" | |
35 | REMOTE="$3" | |
36 | BASE="$1" | |
5c38ea31 DA |
37 | |
38 | # $LOCAL and $REMOTE are temporary files so prompt | |
39 | # the user with the real $MERGED name before launching $merge_tool. | |
40 | if should_prompt; then | |
41 | printf "\nViewing: '$MERGED'\n" | |
1c6f5b52 DA |
42 | if use_ext_cmd; then |
43 | printf "Hit return to launch '%s': " \ | |
44 | "$GIT_DIFFTOOL_EXTCMD" | |
45 | else | |
46 | printf "Hit return to launch '%s': " "$merge_tool" | |
47 | fi | |
5c38ea31 DA |
48 | read ans |
49 | fi | |
50 | ||
1c6f5b52 | 51 | if use_ext_cmd; then |
9f3d54d1 | 52 | eval $GIT_DIFFTOOL_EXTCMD '"$LOCAL"' '"$REMOTE"' |
1c6f5b52 DA |
53 | else |
54 | run_merge_tool "$merge_tool" | |
55 | fi | |
5c38ea31 DA |
56 | } |
57 | ||
1c6f5b52 DA |
58 | if ! use_ext_cmd; then |
59 | if test -n "$GIT_DIFF_TOOL"; then | |
60 | merge_tool="$GIT_DIFF_TOOL" | |
61 | else | |
62 | merge_tool="$(get_merge_tool)" || exit | |
63 | fi | |
47d65924 | 64 | fi |
5c38ea31 DA |
65 | |
66 | # Launch the merge tool on each path provided by 'git diff' | |
67 | while test $# -gt 6 | |
68 | do | |
69 | launch_merge_tool "$1" "$2" "$5" | |
70 | shift 7 | |
71 | done |