]> git.ipfire.org Git - thirdparty/git.git/commitdiff
i18n: factorize more 'incompatible options' messages
authorJean-Noël Avila <jn.avila@free.fr>
Mon, 31 Jan 2022 22:07:46 +0000 (22:07 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 4 Feb 2022 21:58:28 +0000 (13:58 -0800)
Find more incompatible options to factorize.

When more than two options are mutually exclusive, print the ones
which are actually on the command line.

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/commit.c
builtin/difftool.c
builtin/grep.c
builtin/log.c
builtin/merge-base.c
parse-options.c
parse-options.h
t/t7500-commit-template-squash-signoff.sh

index b9ed0374e301ae958906435fa6592e9d3bbe52fa..33ca9e99c80f58e1e4a9f5f46f2dacac44777b14 100644 (file)
@@ -1242,8 +1242,6 @@ static int parse_and_validate_options(int argc, const char *argv[],
                                      struct commit *current_head,
                                      struct wt_status *s)
 {
-       int f = 0;
-
        argc = parse_options(argc, argv, prefix, options, usage, 0);
        finalize_deferred_config(s);
 
@@ -1251,7 +1249,7 @@ static int parse_and_validate_options(int argc, const char *argv[],
                force_author = find_author_by_nickname(force_author);
 
        if (force_author && renew_authorship)
-               die(_("Using both --reset-author and --author does not make sense"));
+               die(_("options '%s' and '%s' cannot be used together"), "--reset-author", "--author");
 
        if (logfile || have_option_m || use_message)
                use_editor = 0;
@@ -1268,20 +1266,16 @@ static int parse_and_validate_options(int argc, const char *argv[],
                        die(_("You are in the middle of a rebase -- cannot amend."));
        }
        if (fixup_message && squash_message)
-               die(_("Options --squash and --fixup cannot be used together"));
-       if (use_message)
-               f++;
-       if (edit_message)
-               f++;
-       if (fixup_message)
-               f++;
-       if (logfile)
-               f++;
-       if (f > 1)
-               die(_("Only one of -c/-C/-F/--fixup can be used."));
-       if (have_option_m && (edit_message || use_message || logfile))
-               die((_("Option -m cannot be combined with -c/-C/-F.")));
-       if (f || have_option_m)
+               die(_("options '%s' and '%s' cannot be used together"), "--squash", "--fixup");
+       die_for_incompatible_opt4(!!use_message, "-C",
+                                 !!edit_message, "-c",
+                                 !!logfile, "-F",
+                                 !!fixup_message, "--fixup");
+       die_for_incompatible_opt4(have_option_m, "-m",
+                                 !!edit_message, "-c",
+                                 !!use_message, "-C",
+                                 !!logfile, "-F");
+       if (use_message || edit_message || logfile ||fixup_message || have_option_m)
                template_file = NULL;
        if (edit_message)
                use_message = edit_message;
@@ -1306,9 +1300,10 @@ static int parse_and_validate_options(int argc, const char *argv[],
        if (patch_interactive)
                interactive = 1;
 
-       if (also + only + all + interactive > 1)
-               die(_("Only one of --include/--only/--all/--interactive/--patch can be used."));
-
+       die_for_incompatible_opt4(also, "-i/--include",
+                                 only, "-o/--only",
+                                 all, "-a/--all",
+                                 interactive, "--interactive/-p/--patch");
        if (fixup_message) {
                /*
                 * We limit --fixup's suboptions to only alpha characters.
index c79fbbf67e5ee0d4e7d09c7997f1fa04dc1400bc..faa3507369a23d16dfd454aab83c6b813aceb59f 100644 (file)
@@ -732,8 +732,9 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
        } else if (dir_diff)
                die(_("options '%s' and '%s' cannot be used together"), "--dir-diff", "--no-index");
 
-       if (use_gui_tool + !!difftool_cmd + !!extcmd > 1)
-               die(_("options '%s', '%s', and '%s' cannot be used together"), "--gui", "--tool", "--extcmd");
+       die_for_incompatible_opt3(use_gui_tool, "--gui",
+                                 !!difftool_cmd, "--tool",
+                                 !!extcmd, "--extcmd");
 
        if (use_gui_tool)
                setenv("GIT_MERGETOOL_GUI", "true", 1);
index 9e34a820ad4d837937a0ecb2bc712de972506b50..88144f06300b539dfe156cd6d76cd5b8a69e9369 100644 (file)
@@ -1167,11 +1167,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
        if (!show_in_pager && !opt.status_only)
                setup_pager();
 
-       if (!use_index && (untracked || cached))
-               die(_("--cached or --untracked cannot be used with --no-index"));
-
-       if (untracked && cached)
-               die(_("--untracked cannot be used with --cached"));
+       die_for_incompatible_opt3(!use_index, "--no-index",
+                                 untracked, "--untracked",
+                                 cached, "--cached");
 
        if (!use_index || untracked) {
                int use_exclude = (opt_exclude < 0) ? use_index : !!opt_exclude;
index 4b493408cc5d1253e84fd17dddec58340d38aa7e..970aa3483c4834f06498df865a5c94c1b2d0b210 100644 (file)
@@ -1978,8 +1978,9 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        if (rev.show_notes)
                load_display_notes(&rev.notes_opt);
 
-       if (use_stdout + rev.diffopt.close_file + !!output_directory > 1)
-               die(_("options '%s', '%s', and '%s' cannot be used together"), "--stdout", "--output", "--output-directory");
+       die_for_incompatible_opt3(use_stdout, "--stdout",
+                                 rev.diffopt.close_file, "--output",
+                                 !!output_directory, "--output-directory");
 
        if (use_stdout) {
                setup_pager();
index 6719ac198dc2092ae49829d5946ca00664e34b0e..26b84980dbd795372f3a4f8e6bc841d8f14bbcb2 100644 (file)
@@ -159,12 +159,14 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
                if (argc < 2)
                        usage_with_options(merge_base_usage, options);
                if (show_all)
-                       die("--is-ancestor cannot be used with --all");
+                       die(_("options '%s' and '%s' cannot be used together"),
+                           "--is-ancestor", "--all");
                return handle_is_ancestor(argc, argv);
        }
 
        if (cmdmode == 'r' && show_all)
-               die("--independent cannot be used with --all");
+               die(_("options '%s' and '%s' cannot be used together"),
+                   "--independent", "--all");
 
        if (cmdmode == 'o')
                return handle_octopus(argc, argv, show_all);
index a8283037be966596184862aa358bff6fd37194f3..276e3911a743cf74bdb4cf86b451b24cb869408f 100644 (file)
@@ -1079,3 +1079,37 @@ void NORETURN usage_msg_opt(const char *msg,
        die_message("%s\n", msg); /* The extra \n is intentional */
        usage_with_options(usagestr, options);
 }
+
+void die_for_incompatible_opt4(int opt1, const char *opt1_name,
+                              int opt2, const char *opt2_name,
+                              int opt3, const char *opt3_name,
+                              int opt4, const char *opt4_name)
+{
+       int count = 0;
+       const char *options[4];
+
+       if (opt1)
+               options[count++] = opt1_name;
+       if (opt2)
+               options[count++] = opt2_name;
+       if (opt3)
+               options[count++] = opt3_name;
+       if (opt4)
+               options[count++] = opt4_name;
+       switch (count) {
+       case 4:
+               die(_("options '%s', '%s', '%s', and '%s' cannot be used together"),
+                   opt1_name, opt2_name, opt3_name, opt4_name);
+               break;
+       case 3:
+               die(_("options '%s', '%s', and '%s' cannot be used together"),
+                   options[0], options[1], options[2]);
+               break;
+       case 2:
+               die(_("options '%s' and '%s' cannot be used together"),
+                   options[0], options[1]);
+               break;
+       default:
+               break;
+       }
+}
index e22846d3b7be06fd2af2f81532633d6d773f0bab..f773cc7859faad929a3fd6ba99aca39303c57186 100644 (file)
@@ -225,6 +225,22 @@ NORETURN void usage_msg_opt(const char *msg,
                            const char * const *usagestr,
                            const struct option *options);
 
+void die_for_incompatible_opt4(int opt1, const char *opt1_name,
+                              int opt2, const char *opt2_name,
+                              int opt3, const char *opt3_name,
+                              int opt4, const char *opt4_name);
+
+
+static inline void die_for_incompatible_opt3(int opt1, const char *opt1_name,
+                                            int opt2, const char *opt2_name,
+                                            int opt3, const char *opt3_name)
+{
+       die_for_incompatible_opt4(opt1, opt1_name,
+                                 opt2, opt2_name,
+                                 opt3, opt3_name,
+                                 0, "");
+}
+
 /*
  * Use these assertions for callbacks that expect to be called with NONEG and
  * NOARG respectively, and do not otherwise handle the "unset" and "arg"
index 91964653a0b6937cf41c3ac2b687523f482abdb2..5fcaa0b4f2aa5e7b533f0dc0beb5426f2997645a 100755 (executable)
@@ -442,7 +442,7 @@ test_expect_success '--fixup=reword: give error with pathsec' '
 '
 
 test_expect_success '--fixup=reword: -F give error message' '
-       echo "fatal: Only one of -c/-C/-F/--fixup can be used." >expect &&
+       echo "fatal: options '\''-F'\'' and '\''--fixup'\'' cannot be used together" >expect &&
        test_must_fail git commit --fixup=reword:HEAD~ -F msg  2>actual &&
        test_cmp expect actual
 '