difftool: make --gui, --tool and --extcmd mutually exclusive
authorDenton Liu <liu.denton@gmail.com>
Mon, 29 Apr 2019 06:21:17 +0000 (02:21 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 May 2019 14:11:59 +0000 (23:11 +0900)
In git-difftool, these options specify which tool to ultimately run. As
a result, they are logically conflicting. Explicitly disallow these
options from being used together.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/difftool.c
t/t7800-difftool.sh
index 544b0e86397cb98ddfdad3cffdd983905ee36029..481aa64af51d80af46b01ce1b768d185f0dc3174 100644 (file)
@@ -730,6 +730,9 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
        setenv(GIT_DIR_ENVIRONMENT, absolute_path(get_git_dir()), 1);
        setenv(GIT_WORK_TREE_ENVIRONMENT, absolute_path(get_git_work_tree()), 1);
 
+       if (use_gui_tool + !!difftool_cmd + !!extcmd > 1)
+               die(_("--gui, --tool and --extcmd are mutually exclusive"));
+
        if (use_gui_tool && diff_gui_tool && *diff_gui_tool)
                setenv("GIT_DIFF_TOOL", diff_gui_tool, 1);
        else if (difftool_cmd) {
index 562bd215a5315757dcc7c10e311106f2c7b0ff72..833e175bf9474a396ed79d4a70cac0d2e015a2f8 100755 (executable)
@@ -705,4 +705,12 @@ test_expect_success SYMLINKS 'difftool --dir-diff handles modified symlinks' '
        test_cmp expect actual
 '
 
+test_expect_success 'difftool --gui, --tool and --extcmd are mutually exclusive' '
+       difftool_test_setup &&
+       test_must_fail git difftool --gui --tool=test-tool &&
+       test_must_fail git difftool --gui --extcmd=cat &&
+       test_must_fail git difftool --tool=test-tool --extcmd=cat &&
+       test_must_fail git difftool --gui --tool=test-tool --extcmd=cat
+'
+
 test_done