Merge branch 'maint'
[gitweb.git] / t / t7800-difftool.sh
index 26992265571f11b6df732cc45fe2e08ebaedb77d..ebdccf9a1eb9f9bb4918fc5adee8bdb8fd682608 100755 (executable)
@@ -10,11 +10,17 @@ Testing basic diff tool invocation
 
 . ./test-lib.sh
 
+if ! test_have_prereq PERL; then
+       say 'skipping difftool tests, perl not available'
+       test_done
+fi
+
 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 +32,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 +129,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' '