difftool: make --gui, --tool and --extcmd mutually exclusive

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>

Denton Liu committed Apr 29, 2019 at 02:21 UTC 7f978d7d10a87c4a56ea3101b936cddb25bbe2c6
2 files changed +11
builtin/difftool.c
+3
@@ -730,6 +730,9 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
730 setenv(GIT_DIR_ENVIRONMENT, absolute_path(get_git_dir()), 1);
731 setenv(GIT_WORK_TREE_ENVIRONMENT, absolute_path(get_git_work_tree()), 1);
732
733 + if (use_gui_tool + !!difftool_cmd + !!extcmd > 1)
734 + die(_("--gui, --tool and --extcmd are mutually exclusive"));
735 +
736 if (use_gui_tool && diff_gui_tool && *diff_gui_tool)
737 setenv("GIT_DIFF_TOOL", diff_gui_tool, 1);
738 else if (difftool_cmd) {
t/t7800-difftool.sh
+8
@@ -705,4 +705,12 @@ test_expect_success SYMLINKS 'difftool --dir-diff handles modified symlinks' '
705 test_cmp expect actual
706 '
707
708 +test_expect_success 'difftool --gui, --tool and --extcmd are mutually exclusive' '
709 + difftool_test_setup &&
710 + test_must_fail git difftool --gui --tool=test-tool &&
711 + test_must_fail git difftool --gui --extcmd=cat &&
712 + test_must_fail git difftool --tool=test-tool --extcmd=cat &&
713 + test_must_fail git difftool --gui --tool=test-tool --extcmd=cat
714 +'
715 +
716 test_done