Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100755 89 lines (80 sloc) 1.902 kb
5c38ea3 David Aguilar contrib: add 'git difftool' for launching common merge tools
davvid authored
1 #!/bin/sh
afcbc8e David Aguilar difftool: move 'git-difftool' out of contrib
davvid authored
2 # git-difftool--helper is a GIT_EXTERNAL_DIFF-compatible diff tool launcher.
5c38ea3 David Aguilar contrib: add 'git difftool' for launching common merge tools
davvid authored
3 # This script is typically launched by using the 'git difftool'
4 # convenience command.
5 #
c8a5672 David Aguilar difftool: Update copyright notices to list each year separately
davvid authored
6 # Copyright (c) 2009, 2010 David Aguilar
5c38ea3 David Aguilar contrib: add 'git difftool' for launching common merge tools
davvid authored
7
21d0ba7 David Aguilar difftool/mergetool: refactor commands to use git-mergetool--lib
davvid authored
8 TOOL_MODE=diff
9 . git-mergetool--lib
10
a904392 David Aguilar difftool: add support for a difftool.prompt config variable
davvid authored
11 # difftool.prompt controls the default prompt/no-prompt behavior
12 # and is overridden with $GIT_DIFFTOOL*_PROMPT.
5c38ea3 David Aguilar contrib: add 'git difftool' for launching common merge tools
davvid authored
13 should_prompt () {
4cacc62 Sebastian Schuberth Make difftool.prompt fall back to mergetool.prompt
sschuberth authored
14 prompt_merge=$(git config --bool mergetool.prompt || echo true)
15 prompt=$(git config --bool difftool.prompt || echo $prompt_merge)
fdd7aa1 David Aguilar difftool--helper: Make style consistent with git
davvid authored
16 if test "$prompt" = true
17 then
a904392 David Aguilar difftool: add support for a difftool.prompt config variable
davvid authored
18 test -z "$GIT_DIFFTOOL_NO_PROMPT"
19 else
20 test -n "$GIT_DIFFTOOL_PROMPT"
21 fi
5c38ea3 David Aguilar contrib: add 'git difftool' for launching common merge tools
davvid authored
22 }
23
1c6f5b5 David Aguilar difftool: Allow specifying unconfigured commands with --extcmd
davvid authored
24 # Indicates that --extcmd=... was specified
25 use_ext_cmd () {
26 test -n "$GIT_DIFFTOOL_EXTCMD"
27 }
28
5c38ea3 David Aguilar contrib: add 'git difftool' for launching common merge tools
davvid authored
29 launch_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.
fdd7aa1 David Aguilar difftool--helper: Make style consistent with git
davvid authored
41 if should_prompt
42 then
5c38ea3 David Aguilar contrib: add 'git difftool' for launching common merge tools
davvid authored
43 printf "\nViewing: '$MERGED'\n"
fdd7aa1 David Aguilar difftool--helper: Make style consistent with git
davvid authored
44 if use_ext_cmd
45 then
ba959de Sitaram Chamarty git-difftool: allow skipping file by typing 'n' at prompt
sitaramc authored
46 printf "Launch '%s' [Y/n]: " \
1c6f5b5 David Aguilar difftool: Allow specifying unconfigured commands with --extcmd
davvid authored
47 "$GIT_DIFFTOOL_EXTCMD"
48 else
ba959de Sitaram Chamarty git-difftool: allow skipping file by typing 'n' at prompt
sitaramc authored
49 printf "Launch '%s' [Y/n]: " "$merge_tool"
50 fi
51 if read ans && test "$ans" = n
52 then
53 return
1c6f5b5 David Aguilar difftool: Allow specifying unconfigured commands with --extcmd
davvid authored
54 fi
5c38ea3 David Aguilar contrib: add 'git difftool' for launching common merge tools
davvid authored
55 fi
56
fdd7aa1 David Aguilar difftool--helper: Make style consistent with git
davvid authored
57 if use_ext_cmd
58 then
4a689af Michael J Gruber difftool: provide basename to external tools
mjg authored
59 export BASE
9f3d54d David Aguilar difftool: Use eval to expand '--extcmd' expressions
davvid authored
60 eval $GIT_DIFFTOOL_EXTCMD '"$LOCAL"' '"$REMOTE"'
1c6f5b5 David Aguilar difftool: Allow specifying unconfigured commands with --extcmd
davvid authored
61 else
62 run_merge_tool "$merge_tool"
63 fi
5c38ea3 David Aguilar contrib: add 'git difftool' for launching common merge tools
davvid authored
64 }
65
fdd7aa1 David Aguilar difftool--helper: Make style consistent with git
davvid authored
66 if ! use_ext_cmd
67 then
68 if test -n "$GIT_DIFF_TOOL"
69 then
1c6f5b5 David Aguilar difftool: Allow specifying unconfigured commands with --extcmd
davvid authored
70 merge_tool="$GIT_DIFF_TOOL"
71 else
72 merge_tool="$(get_merge_tool)" || exit
73 fi
47d6592 David Aguilar mergetool--lib: simplify API usage by removing more global variables
davvid authored
74 fi
5c38ea3 David Aguilar contrib: add 'git difftool' for launching common merge tools
davvid authored
75
7e0abce Tim Henigan difftool: teach difftool to handle directory diffs
thenigan authored
76 if test -n "$GIT_DIFFTOOL_DIRDIFF"
77 then
78 LOCAL="$1"
79 REMOTE="$2"
80 run_merge_tool "$merge_tool" false
81 else
82 # Launch the merge tool on each path provided by 'git diff'
83 while test $# -gt 6
84 do
85 launch_merge_tool "$1" "$2" "$5"
86 shift 7
87 done
88 fi
Something went wrong with that request. Please try again.