]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'rs/incompatible-options-messages' into maint-2.43
authorJunio C Hamano <gitster@pobox.com>
Fri, 9 Feb 2024 00:22:06 +0000 (16:22 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 9 Feb 2024 00:22:06 +0000 (16:22 -0800)
Clean-up code that handles combinations of incompatible options.

* rs/incompatible-options-messages:
  worktree: simplify incompatibility message for --orphan and commit-ish
  worktree: standardize incompatibility messages
  clean: factorize incompatibility message
  revision, rev-parse: factorize incompatibility messages about - -exclude-hidden
  revision: use die_for_incompatible_opt3() for - -graph/--reverse/--walk-reflogs
  repack: use die_for_incompatible_opt3() for -A/-k/--cruft
  push: use die_for_incompatible_opt4() for - -delete/--tags/--all/--mirror

builtin/clean.c
builtin/push.c
builtin/repack.c
builtin/rev-parse.c
builtin/worktree.c
revision.c
t/t2400-worktree-add.sh
t/t6018-rev-list-glob.sh
t/t6021-rev-list-exclude-hidden.sh

index 49c224e626d61819a633252572d3e7f3b32ffd62..d90766cad3a0ba13c41dd0b90c03254ba5eb83ee 100644 (file)
@@ -971,7 +971,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
        dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;
 
        if (ignored && ignored_only)
-               die(_("-x and -X cannot be used together"));
+               die(_("options '%s' and '%s' cannot be used together"), "-x", "-X");
        if (!ignored)
                setup_standard_excludes(&dir);
        if (ignored_only)
index 2e708383c24ba86e07fc14b0139afb28d489c014..f77f4243245ffde14d5edd661b647ef99d9f28c7 100644 (file)
@@ -639,8 +639,10 @@ int cmd_push(int argc, const char **argv, const char *prefix)
                : &push_options_config);
        set_push_cert_flags(&flags, push_cert);
 
-       if (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR))))
-               die(_("options '%s' and '%s' cannot be used together"), "--delete", "--all/--branches/--mirror/--tags");
+       die_for_incompatible_opt4(deleterefs, "--delete",
+                                 tags, "--tags",
+                                 flags & TRANSPORT_PUSH_ALL, "--all/--branches",
+                                 flags & TRANSPORT_PUSH_MIRROR, "--mirror");
        if (deleterefs && argc < 2)
                die(_("--delete doesn't make sense without any refs"));
 
@@ -677,19 +679,13 @@ int cmd_push(int argc, const char **argv, const char *prefix)
                flags |= (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE);
 
        if (flags & TRANSPORT_PUSH_ALL) {
-               if (tags)
-                       die(_("options '%s' and '%s' cannot be used together"), "--all", "--tags");
                if (argc >= 2)
                        die(_("--all can't be combined with refspecs"));
        }
        if (flags & TRANSPORT_PUSH_MIRROR) {
-               if (tags)
-                       die(_("options '%s' and '%s' cannot be used together"), "--mirror", "--tags");
                if (argc >= 2)
                        die(_("--mirror can't be combined with refspecs"));
        }
-       if ((flags & TRANSPORT_PUSH_ALL) && (flags & TRANSPORT_PUSH_MIRROR))
-               die(_("options '%s' and '%s' cannot be used together"), "--all", "--mirror");
 
        if (!is_empty_cas(&cas) && (flags & TRANSPORT_PUSH_FORCE_IF_INCLUDES))
                cas.use_force_if_includes = 1;
index edaee4dbec7b01624b5d272a7c402c49f46dba5d..c54777bbe594c4dd028dde93d1c0132cd1d7aea3 100644 (file)
@@ -1203,19 +1203,13 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
        if (delete_redundant && repository_format_precious_objects)
                die(_("cannot delete packs in a precious-objects repo"));
 
-       if (keep_unreachable &&
-           (unpack_unreachable || (pack_everything & LOOSEN_UNREACHABLE)))
-               die(_("options '%s' and '%s' cannot be used together"), "--keep-unreachable", "-A");
+       die_for_incompatible_opt3(unpack_unreachable || (pack_everything & LOOSEN_UNREACHABLE), "-A",
+                                 keep_unreachable, "-k/--keep-unreachable",
+                                 pack_everything & PACK_CRUFT, "--cruft");
 
-       if (pack_everything & PACK_CRUFT) {
+       if (pack_everything & PACK_CRUFT)
                pack_everything |= ALL_INTO_ONE;
 
-               if (unpack_unreachable || (pack_everything & LOOSEN_UNREACHABLE))
-                       die(_("options '%s' and '%s' cannot be used together"), "--cruft", "-A");
-               if (keep_unreachable)
-                       die(_("options '%s' and '%s' cannot be used together"), "--cruft", "-k");
-       }
-
        if (write_bitmaps < 0) {
                if (!write_midx &&
                    (!(pack_everything & ALL_INTO_ONE) || !is_bare_repository()))
index fde8861ca4e07990078258843890aef6334dd4c9..917f12244059a67b74b43c80ec59b8503b61700f 100644 (file)
@@ -893,13 +893,15 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
                        }
                        if (opt_with_value(arg, "--branches", &arg)) {
                                if (ref_excludes.hidden_refs_configured)
-                                       return error(_("--exclude-hidden cannot be used together with --branches"));
+                                       return error(_("options '%s' and '%s' cannot be used together"),
+                                                    "--exclude-hidden", "--branches");
                                handle_ref_opt(arg, "refs/heads/");
                                continue;
                        }
                        if (opt_with_value(arg, "--tags", &arg)) {
                                if (ref_excludes.hidden_refs_configured)
-                                       return error(_("--exclude-hidden cannot be used together with --tags"));
+                                       return error(_("options '%s' and '%s' cannot be used together"),
+                                                    "--exclude-hidden", "--tags");
                                handle_ref_opt(arg, "refs/tags/");
                                continue;
                        }
@@ -909,7 +911,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
                        }
                        if (opt_with_value(arg, "--remotes", &arg)) {
                                if (ref_excludes.hidden_refs_configured)
-                                       return error(_("--exclude-hidden cannot be used together with --remotes"));
+                                       return error(_("options '%s' and '%s' cannot be used together"),
+                                                    "--exclude-hidden", "--remotes");
                                handle_ref_opt(arg, "refs/remotes/");
                                continue;
                        }
index 62b7e26f4bdb17f524914ab6e60143915d8f2565..4ac16215416a004e9e0a5db321fa6d56c7f6c9ab 100644 (file)
@@ -730,11 +730,11 @@ static int dwim_orphan(const struct add_opts *opts, int opt_track, int remote)
        }
 
        if (opt_track) {
-               die(_("'%s' and '%s' cannot be used together"), "--orphan",
-                   "--track");
+               die(_("options '%s' and '%s' cannot be used together"),
+                   "--orphan", "--track");
        } else if (!opts->checkout) {
-               die(_("'%s' and '%s' cannot be used together"), "--orphan",
-                   "--no-checkout");
+               die(_("options '%s' and '%s' cannot be used together"),
+                   "--orphan", "--no-checkout");
        }
        return 1;
 }
@@ -806,16 +806,17 @@ static int add(int ac, const char **av, const char *prefix)
        if (!!opts.detach + !!new_branch + !!new_branch_force > 1)
                die(_("options '%s', '%s', and '%s' cannot be used together"), "-b", "-B", "--detach");
        if (opts.detach && opts.orphan)
-               die(_("options '%s', and '%s' cannot be used together"),
+               die(_("options '%s' and '%s' cannot be used together"),
                    "--orphan", "--detach");
        if (opts.orphan && opt_track)
-               die(_("'%s' and '%s' cannot be used together"), "--orphan", "--track");
+               die(_("options '%s' and '%s' cannot be used together"),
+                   "--orphan", "--track");
        if (opts.orphan && !opts.checkout)
-               die(_("'%s' and '%s' cannot be used together"), "--orphan",
-                   "--no-checkout");
+               die(_("options '%s' and '%s' cannot be used together"),
+                   "--orphan", "--no-checkout");
        if (opts.orphan && ac == 2)
-               die(_("'%s' and '%s' cannot be used together"), "--orphan",
-                   _("<commit-ish>"));
+               die(_("option '%s' and commit-ish cannot be used together"),
+                   "--orphan");
        if (lock_reason && !keep_locked)
                die(_("the option '%s' requires '%s'"), "--reason", "--lock");
        if (lock_reason)
index 2622e98f1b7022ce1da6614aa4d70f3dbc2c6da9..56b8a6acfa98692a8e6aec55757923b70802e12c 100644 (file)
@@ -2728,7 +2728,8 @@ static int handle_revision_pseudo_opt(struct rev_info *revs,
                clear_ref_exclusions(&revs->ref_excludes);
        } else if (!strcmp(arg, "--branches")) {
                if (revs->ref_excludes.hidden_refs_configured)
-                       return error(_("--exclude-hidden cannot be used together with --branches"));
+                       return error(_("options '%s' and '%s' cannot be used together"),
+                                    "--exclude-hidden", "--branches");
                handle_refs(refs, revs, *flags, refs_for_each_branch_ref);
                clear_ref_exclusions(&revs->ref_excludes);
        } else if (!strcmp(arg, "--bisect")) {
@@ -2739,12 +2740,14 @@ static int handle_revision_pseudo_opt(struct rev_info *revs,
                revs->bisect = 1;
        } else if (!strcmp(arg, "--tags")) {
                if (revs->ref_excludes.hidden_refs_configured)
-                       return error(_("--exclude-hidden cannot be used together with --tags"));
+                       return error(_("options '%s' and '%s' cannot be used together"),
+                                    "--exclude-hidden", "--tags");
                handle_refs(refs, revs, *flags, refs_for_each_tag_ref);
                clear_ref_exclusions(&revs->ref_excludes);
        } else if (!strcmp(arg, "--remotes")) {
                if (revs->ref_excludes.hidden_refs_configured)
-                       return error(_("--exclude-hidden cannot be used together with --remotes"));
+                       return error(_("options '%s' and '%s' cannot be used together"),
+                                    "--exclude-hidden", "--remotes");
                handle_refs(refs, revs, *flags, refs_for_each_remote_ref);
                clear_ref_exclusions(&revs->ref_excludes);
        } else if ((argcount = parse_long_opt("glob", argv, &optarg))) {
@@ -2762,21 +2765,24 @@ static int handle_revision_pseudo_opt(struct rev_info *revs,
        } else if (skip_prefix(arg, "--branches=", &optarg)) {
                struct all_refs_cb cb;
                if (revs->ref_excludes.hidden_refs_configured)
-                       return error(_("--exclude-hidden cannot be used together with --branches"));
+                       return error(_("options '%s' and '%s' cannot be used together"),
+                                    "--exclude-hidden", "--branches");
                init_all_refs_cb(&cb, revs, *flags);
                for_each_glob_ref_in(handle_one_ref, optarg, "refs/heads/", &cb);
                clear_ref_exclusions(&revs->ref_excludes);
        } else if (skip_prefix(arg, "--tags=", &optarg)) {
                struct all_refs_cb cb;
                if (revs->ref_excludes.hidden_refs_configured)
-                       return error(_("--exclude-hidden cannot be used together with --tags"));
+                       return error(_("options '%s' and '%s' cannot be used together"),
+                                    "--exclude-hidden", "--tags");
                init_all_refs_cb(&cb, revs, *flags);
                for_each_glob_ref_in(handle_one_ref, optarg, "refs/tags/", &cb);
                clear_ref_exclusions(&revs->ref_excludes);
        } else if (skip_prefix(arg, "--remotes=", &optarg)) {
                struct all_refs_cb cb;
                if (revs->ref_excludes.hidden_refs_configured)
-                       return error(_("--exclude-hidden cannot be used together with --remotes"));
+                       return error(_("options '%s' and '%s' cannot be used together"),
+                                    "--exclude-hidden", "--remotes");
                init_all_refs_cb(&cb, revs, *flags);
                for_each_glob_ref_in(handle_one_ref, optarg, "refs/remotes/", &cb);
                clear_ref_exclusions(&revs->ref_excludes);
@@ -3055,8 +3061,6 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
                revs->grep_filter.ignore_locale = 1;
        compile_grep_patterns(&revs->grep_filter);
 
-       if (revs->reverse && revs->reflog_info)
-               die(_("options '%s' and '%s' cannot be used together"), "--reverse", "--walk-reflogs");
        if (revs->reflog_info && revs->limited)
                die("cannot combine --walk-reflogs with history-limiting options");
        if (revs->rewrite_parents && revs->children.name)
@@ -3067,11 +3071,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
        /*
         * Limitations on the graph functionality
         */
-       if (revs->reverse && revs->graph)
-               die(_("options '%s' and '%s' cannot be used together"), "--reverse", "--graph");
+       die_for_incompatible_opt3(!!revs->graph, "--graph",
+                                 !!revs->reverse, "--reverse",
+                                 !!revs->reflog_info, "--walk-reflogs");
 
-       if (revs->reflog_info && revs->graph)
-               die(_("options '%s' and '%s' cannot be used together"), "--walk-reflogs", "--graph");
        if (revs->no_walk && revs->graph)
                die(_("options '%s' and '%s' cannot be used together"), "--no-walk", "--graph");
        if (!revs->reflog_info && revs->grep_filter.use_reflog_filter)
index df4aff7825c9f8430d7449d1bdf2b0d5045d397a..245656b53a9702566c33043b7965ece1d8662add 100755 (executable)
@@ -711,7 +711,7 @@ test_dwim_orphan () {
        local fetch_error_text="fatal: No local or remote refs exist despite at least one remote" &&
        local orphan_hint="hint: If you meant to create a worktree containing a new orphan branch" &&
        local invalid_ref_regex="^fatal: invalid reference: " &&
-       local bad_combo_regex="^fatal: '[-a-z]*' and '[-a-z]*' cannot be used together" &&
+       local bad_combo_regex="^fatal: options '[-a-z]*' and '[-a-z]*' cannot be used together" &&
 
        local git_ns="repo" &&
        local dashc_args="-C $git_ns" &&
index 67d523d40571b89b50cc5ca655ec77198c1a3ae3..3b181f771c25a3d8a074f7d0472bf1f0422f582b 100755 (executable)
@@ -214,15 +214,13 @@ do
        for pseudoopt in branches tags remotes
        do
                test_expect_success "rev-parse --exclude-hidden=$section fails with --$pseudoopt" '
-                       echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
                        test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt 2>err &&
-                       test_cmp expected err
+                       test_grep "error: options .--exclude-hidden. and .--$pseudoopt. cannot be used together" err
                '
 
                test_expect_success "rev-parse --exclude-hidden=$section fails with --$pseudoopt=pattern" '
-                       echo "error: --exclude-hidden cannot be used together with --$pseudoopt" >expected &&
                        test_must_fail git rev-parse --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
-                       test_cmp expected err
+                       test_grep "error: options .--exclude-hidden. and .--$pseudoopt. cannot be used together" err
                '
        done
 done
index cdf7aa94276cb9e993dcad825994828322e5b3ea..51df02105d7b83c3b0b1c85f95d419ac9a4bbfe1 100755 (executable)
@@ -151,12 +151,12 @@ do
        do
                test_expect_success "$section: fails with --$pseudoopt" '
                        test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt 2>err &&
-                       test_grep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
+                       test_grep "error: options .--exclude-hidden. and .--$pseudoopt. cannot be used together" err
                '
 
                test_expect_success "$section: fails with --$pseudoopt=pattern" '
                        test_must_fail git rev-list --exclude-hidden=$section --$pseudoopt=pattern 2>err &&
-                       test_grep "error: --exclude-hidden cannot be used together with --$pseudoopt" err
+                       test_grep "error: options .--exclude-hidden. and .--$pseudoopt. cannot be used together" err
                '
        done
 done