summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 61ed71d)
raw | patch | inline | side by side (parent: 61ed71d)
author | David Aguilar <davvid@gmail.com> | |
Sun, 10 Jan 2010 04:02:42 +0000 (20:02 -0800) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Sun, 10 Jan 2010 06:41:30 +0000 (22:41 -0800) |
git-difftool requires difftool.<tool>.cmd configuration even when
tools use the standard "$diffcmd $from $to" form. This teaches
git-difftool to run these tools in lieu of configuration by
allowing the command to be specified on the command line.
Reference: http://article.gmane.org/gmane.comp.version-control.git/133377
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
tools use the standard "$diffcmd $from $to" form. This teaches
git-difftool to run these tools in lieu of configuration by
allowing the command to be specified on the command line.
Reference: http://article.gmane.org/gmane.comp.version-control.git/133377
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-difftool.txt | patch | blob | history | |
git-difftool--helper.sh | patch | blob | history | |
git-difftool.perl | patch | blob | history | |
t/t7800-difftool.sh | patch | blob | history |
index a5bce6278b6570e9feb94cfbe0f67f3814a36aa5..f67d2db761e28aa1d69a182c0361718ee1ec751c 100644 (file)
of the diff post-image. `$BASE` is provided for compatibility
with custom merge tool commands and has the same value as `$LOCAL`.
+--extcmd=<command>::
+ Specify a custom command for viewing diffs.
+ 'git-difftool' ignores the configured defaults and runs
+ `$command $LOCAL $REMOTE` when this option is specified.
+
-g::
--gui::
When 'git-difftool' is invoked with the `-g` or `--gui` option
index 3621f28c7969b7848e3fbcac49647f32028f18e7..d806eaef541742f0cd3ab47c855e01749d7b6535 100755 (executable)
--- a/git-difftool--helper.sh
+++ b/git-difftool--helper.sh
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
# the user with the real $MERGED name before launching $merge_tool.
if should_prompt; then
printf "\nViewing: '$MERGED'\n"
- printf "Hit return to launch '%s': " "$merge_tool"
+ if use_ext_cmd; then
+ printf "Hit return to launch '%s': " \
+ "$GIT_DIFFTOOL_EXTCMD"
+ else
+ printf "Hit return to launch '%s': " "$merge_tool"
+ fi
read ans
fi
- run_merge_tool "$merge_tool"
+ if use_ext_cmd; then
+ $GIT_DIFFTOOL_EXTCMD "$LOCAL" "$REMOTE"
+ else
+ run_merge_tool "$merge_tool"
+ fi
+
}
-# GIT_DIFF_TOOL indicates that --tool=... was specified
-if test -n "$GIT_DIFF_TOOL"; then
- merge_tool="$GIT_DIFF_TOOL"
-else
- merge_tool="$(get_merge_tool)" || exit
+if ! use_ext_cmd; then
+ if test -n "$GIT_DIFF_TOOL"; then
+ merge_tool="$GIT_DIFF_TOOL"
+ else
+ merge_tool="$(get_merge_tool)" || exit
+ fi
fi
# Launch the merge tool on each path provided by 'git diff'
diff --git a/git-difftool.perl b/git-difftool.perl
index 8c836e4c76528e52b010dd37e904f132d5386000..f8ff245756c237894523c01068170955f988df75 100755 (executable)
--- a/git-difftool.perl
+++ b/git-difftool.perl
$skip_next = 1;
next;
}
+ if ($arg =~ /^--extcmd=/) {
+ $ENV{GIT_DIFFTOOL_EXTCMD} = substr($arg, 9);
+ next;
+ }
if ($arg =~ /^--tool=/) {
$ENV{GIT_DIFF_TOOL} = substr($arg, 7);
next;
diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
index eca51a8fe8090e22f49b3c983a95fe1388be4584..8ee186a5fbda8b52cf3dd817a76f2f560505a253 100755 (executable)
--- a/t/t7800-difftool.sh
+++ b/t/t7800-difftool.sh
diff=$(git difftool --tool=tkdiff --no-prompt branch) &&
git config --unset difftool.tkdiff.path &&
lines=$(echo "$diff" | grep file | wc -l) &&
- test "$lines" -eq 1
+ test "$lines" -eq 1 &&
+
+ restore_test_defaults
+'
+
+test_expect_success 'difftool --extcmd=...' '
+ diff=$(git difftool --no-prompt --extcmd=cat branch) &&
+
+ lines=$(echo "$diff" | wc -l) &&
+ test "$lines" -eq 2 &&
+
+ lines=$(echo "$diff" | grep master | wc -l) &&
+ test "$lines" -eq 1 &&
+
+ lines=$(echo "$diff" | grep branch | wc -l) &&
+ test "$lines" -eq 1 &&
+
+ restore_test_defaults
'
test_done