difftool: add support for a difftool.prompt config variable
difftool now supports difftool.prompt so that users do not have to pass --no-prompt or hit enter each time a diff tool is launched. The --prompt flag overrides the configuration variable. Signed-off-by: David Aguilar <davvid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
f92f2038a5
commit
a904392eae
@ -685,6 +685,9 @@ difftool.<tool>.cmd::
|
||||
is set to the name of the temporary file containing the contents
|
||||
of the diff post-image.
|
||||
|
||||
difftool.prompt::
|
||||
Prompt before each invocation of the diff tool.
|
||||
|
||||
diff.wordRegex::
|
||||
A POSIX Extended Regular Expression used to determine what is a "word"
|
||||
when performing word-by-word difference calculations. Character
|
||||
|
@ -7,7 +7,7 @@ git-difftool - Show changes using common diff tools
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
'git difftool' [--tool=<tool>] [-y|--no-prompt] [<'git diff' options>]
|
||||
'git difftool' [--tool=<tool>] [-y|--no-prompt|--prompt] [<'git diff' options>]
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
@ -21,6 +21,11 @@ OPTIONS
|
||||
--no-prompt::
|
||||
Do not prompt before launching a diff tool.
|
||||
|
||||
--prompt::
|
||||
Prompt before each invocation of the diff tool.
|
||||
This is the default behaviour; the option is provided to
|
||||
override any configuration settings.
|
||||
|
||||
-t <tool>::
|
||||
--tool=<tool>::
|
||||
Use the diff tool specified by <tool>.
|
||||
@ -72,6 +77,9 @@ difftool.<tool>.cmd::
|
||||
+
|
||||
See the `--tool=<tool>` option above for more details.
|
||||
|
||||
difftool.prompt::
|
||||
Prompt before each invocation of the diff tool.
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
linkgit:git-diff[1]::
|
||||
|
@ -5,9 +5,15 @@
|
||||
#
|
||||
# Copyright (c) 2009 David Aguilar
|
||||
|
||||
# Set GIT_DIFFTOOL_NO_PROMPT to bypass the per-file prompt.
|
||||
# difftool.prompt controls the default prompt/no-prompt behavior
|
||||
# and is overridden with $GIT_DIFFTOOL*_PROMPT.
|
||||
should_prompt () {
|
||||
prompt=$(git config --bool difftool.prompt || echo true)
|
||||
if test "$prompt" = true; then
|
||||
test -z "$GIT_DIFFTOOL_NO_PROMPT"
|
||||
else
|
||||
test -n "$GIT_DIFFTOOL_PROMPT"
|
||||
fi
|
||||
}
|
||||
|
||||
# This function prepares temporary files and launches the appropriate
|
||||
|
@ -2,9 +2,12 @@
|
||||
# Copyright (c) 2009 David Aguilar
|
||||
#
|
||||
# This is a wrapper around the GIT_EXTERNAL_DIFF-compatible
|
||||
# git-difftool--helper script. This script exports
|
||||
# GIT_EXTERNAL_DIFF and GIT_PAGER for use by git, and
|
||||
# GIT_DIFFTOOL_NO_PROMPT and GIT_DIFF_TOOL for use by git-difftool--helper.
|
||||
# git-difftool--helper script.
|
||||
#
|
||||
# This script exports GIT_EXTERNAL_DIFF and GIT_PAGER for use by git.
|
||||
# GIT_DIFFTOOL_NO_PROMPT, GIT_DIFFTOOL_PROMPT, and GIT_DIFF_TOOL
|
||||
# are exported for use by git-difftool--helper.
|
||||
#
|
||||
# Any arguments that are unknown to this script are forwarded to 'git diff'.
|
||||
|
||||
use strict;
|
||||
@ -62,6 +65,12 @@ sub generate_command
|
||||
}
|
||||
if ($arg eq '-y' || $arg eq '--no-prompt') {
|
||||
$ENV{GIT_DIFFTOOL_NO_PROMPT} = 'true';
|
||||
delete $ENV{GIT_DIFFTOOL_PROMPT};
|
||||
next;
|
||||
}
|
||||
if ($arg eq '--prompt') {
|
||||
$ENV{GIT_DIFFTOOL_PROMPT} = 'true';
|
||||
delete $ENV{GIT_DIFFTOOL_NO_PROMPT};
|
||||
next;
|
||||
}
|
||||
if ($arg eq '-h' || $arg eq '--help') {
|
||||
|
@ -15,6 +15,7 @@ remove_config_vars()
|
||||
# Unset all config variables used by git-difftool
|
||||
git config --unset diff.tool
|
||||
git config --unset difftool.test-tool.cmd
|
||||
git config --unset difftool.prompt
|
||||
git config --unset merge.tool
|
||||
git config --unset mergetool.test-tool.cmd
|
||||
return 0
|
||||
@ -26,11 +27,18 @@ restore_test_defaults()
|
||||
remove_config_vars
|
||||
unset GIT_DIFF_TOOL
|
||||
unset GIT_MERGE_TOOL
|
||||
unset GIT_DIFFTOOL_PROMPT
|
||||
unset GIT_DIFFTOOL_NO_PROMPT
|
||||
git config diff.tool test-tool &&
|
||||
git config difftool.test-tool.cmd 'cat $LOCAL'
|
||||
}
|
||||
|
||||
prompt_given()
|
||||
{
|
||||
prompt="$1"
|
||||
test "$prompt" = "Hit return to launch 'test-tool': branch"
|
||||
}
|
||||
|
||||
# Create a file on master and change it on branch
|
||||
test_expect_success 'setup' '
|
||||
echo master >file &&
|
||||
@ -116,6 +124,62 @@ test_expect_success 'GIT_DIFFTOOL_NO_PROMPT variable' '
|
||||
restore_test_defaults
|
||||
'
|
||||
|
||||
# git-difftool supports the difftool.prompt variable.
|
||||
# Test that GIT_DIFFTOOL_PROMPT can override difftool.prompt = false
|
||||
test_expect_success 'GIT_DIFFTOOL_PROMPT variable' '
|
||||
git config difftool.prompt false &&
|
||||
GIT_DIFFTOOL_PROMPT=true &&
|
||||
export GIT_DIFFTOOL_PROMPT &&
|
||||
|
||||
prompt=$(echo | git difftool --prompt branch | tail -1) &&
|
||||
prompt_given "$prompt" &&
|
||||
|
||||
restore_test_defaults
|
||||
'
|
||||
|
||||
# Test that we don't have to pass --no-prompt when difftool.prompt is false
|
||||
test_expect_success 'difftool.prompt config variable is false' '
|
||||
git config difftool.prompt false &&
|
||||
|
||||
diff=$(git difftool branch) &&
|
||||
test "$diff" = "branch" &&
|
||||
|
||||
restore_test_defaults
|
||||
'
|
||||
|
||||
# Test that the -y flag can override difftool.prompt = true
|
||||
test_expect_success 'difftool.prompt can overridden with -y' '
|
||||
git config difftool.prompt true &&
|
||||
|
||||
diff=$(git difftool -y branch) &&
|
||||
test "$diff" = "branch" &&
|
||||
|
||||
restore_test_defaults
|
||||
'
|
||||
|
||||
# Test that the --prompt flag can override difftool.prompt = false
|
||||
test_expect_success 'difftool.prompt can overridden with --prompt' '
|
||||
git config difftool.prompt false &&
|
||||
|
||||
prompt=$(echo | git difftool --prompt branch | tail -1) &&
|
||||
prompt_given "$prompt" &&
|
||||
|
||||
restore_test_defaults
|
||||
'
|
||||
|
||||
# Test that the last flag passed on the command-line wins
|
||||
test_expect_success 'difftool last flag wins' '
|
||||
diff=$(git difftool --prompt --no-prompt branch) &&
|
||||
test "$diff" = "branch" &&
|
||||
|
||||
restore_test_defaults &&
|
||||
|
||||
prompt=$(echo | git difftool --no-prompt --prompt branch | tail -1) &&
|
||||
prompt_given "$prompt" &&
|
||||
|
||||
restore_test_defaults
|
||||
'
|
||||
|
||||
# git-difftool falls back to git-mergetool config variables
|
||||
# so test that behavior here
|
||||
test_expect_success 'difftool + mergetool config variables' '
|
||||
|
Loading…
Reference in New Issue
Block a user