]> git.ipfire.org Git - thirdparty/git.git/commitdiff
parse-options API: remove OPTION_ARGUMENT feature
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Mon, 13 Sep 2021 03:35:40 +0000 (05:35 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Sep 2021 06:27:38 +0000 (23:27 -0700)
As was noted in 1a85b49b87a (parse-options: make OPT_ARGUMENT() more
useful, 2019-03-14) there's only ever been one user of the
OPT_ARGUMENT(), that user was added in 20de316e334 (difftool: allow
running outside Git worktrees with --no-index, 2019-03-14).

The OPT_ARGUMENT() feature itself was added way back in
580d5bffdea (parse-options: new option type to treat an option-like
parameter as an argument., 2008-03-02), but as discussed in
1a85b49b87a wasn't used until 20de316e334 in 2019.

Now that the preceding commit has migrated this code over to using
"struct strvec" to manage the "args" member of a "struct
child_process", we can just use that directly instead of relying on
OPT_ARGUMENT.

This has a minor change in behavior in that if we'll pass --no-index
we'll now always pass it as the first argument, before we'd pass it in
whatever position the caller did. Preserving this was the real value
of OPT_ARGUMENT(), but as it turns out we didn't need that either. We
can always inject it as the first argument, the other end will parse
it just the same.

Note that we cannot remove the "out" and "cpidx" members of "struct
parse_opt_ctx_t" added in 580d5bffdea, while they were introduced with
OPT_ARGUMENT() we since used them for other things.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/technical/api-parse-options.txt
builtin/difftool.c
parse-options.c
parse-options.h
t/helper/test-parse-options.c
t/t0040-parse-options.sh

index 5a60bbfa7f4141eca54ac921642dbc2c8ada7ab3..acfd5dc1d8b2f6103ddb556956b63f71b83a4d1b 100644 (file)
@@ -198,11 +198,6 @@ There are some macros to easily define options:
        The filename will be prefixed by passing the filename along with
        the prefix argument of `parse_options()` to `prefix_filename()`.
 
-`OPT_ARGUMENT(long, &int_var, description)`::
-       Introduce a long-option argument that will be kept in `argv[]`.
-       If this option was seen, `int_var` will be set to one (except
-       if a `NULL` pointer was passed).
-
 `OPT_NUMBER_CALLBACK(&var, description, func_ptr)`::
        Recognize numerical options like -123 and feed the integer as
        if it was an argument to the function given by `func_ptr`.
index de2e5545c81a4d6132b8cbd5741f5078d62617f2..bb9fe7245a40b4c84b25e68140105a3af3e6b5ec 100644 (file)
@@ -709,7 +709,7 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
                            "tool returns a non - zero exit code")),
                OPT_STRING('x', "extcmd", &extcmd, N_("command"),
                           N_("specify a custom command for viewing diffs")),
-               OPT_ARGUMENT("no-index", &no_index, N_("passed to `diff`")),
+               OPT_BOOL(0, "no-index", &no_index, N_("passed to `diff`")),
                OPT_END()
        };
        struct child_process child = CHILD_PROCESS_INIT;
@@ -763,6 +763,8 @@ int cmd_difftool(int argc, const char **argv, const char *prefix)
         * each file that changed.
         */
        strvec_push(&child.args, "diff");
+       if (no_index)
+               strvec_push(&child.args, "--no-index");
        if (dir_diff)
                strvec_pushl(&child.args, "--raw", "--no-abbrev", "-z", NULL);
        strvec_pushv(&child.args, argv);
index 2abff136a17b1d37452695f8b06609a3176fa273..55c5821b08d7e0327b244828ce5677d95285ab3c 100644 (file)
@@ -310,19 +310,6 @@ static enum parse_opt_result parse_long_opt(
 again:
                if (!skip_prefix(arg, long_name, &rest))
                        rest = NULL;
-               if (options->type == OPTION_ARGUMENT) {
-                       if (!rest)
-                               continue;
-                       if (*rest == '=')
-                               return error(_("%s takes no value"),
-                                            optname(options, flags));
-                       if (*rest)
-                               continue;
-                       if (options->value)
-                               *(int *)options->value = options->defval;
-                       p->out[p->cpidx++] = arg - 2;
-                       return PARSE_OPT_DONE;
-               }
                if (!rest) {
                        /* abbreviated? */
                        if (!(p->flags & PARSE_OPT_KEEP_UNKNOWN) &&
index a845a9d9527476fbe5269756a7fd03aed6c6d4d7..39d90882548efab2dadfc17c53e76fda1fdc48ad 100644 (file)
@@ -8,7 +8,6 @@
 enum parse_opt_type {
        /* special types */
        OPTION_END,
-       OPTION_ARGUMENT,
        OPTION_GROUP,
        OPTION_NUMBER,
        OPTION_ALIAS,
@@ -155,8 +154,6 @@ struct option {
 #define OPT_INTEGER_F(s, l, v, h, f)     { OPTION_INTEGER, (s), (l), (v), N_("n"), (h), (f) }
 
 #define OPT_END()                   { OPTION_END }
-#define OPT_ARGUMENT(l, v, h)       { OPTION_ARGUMENT, 0, (l), (v), NULL, \
-                                     (h), PARSE_OPT_NOARG, NULL, 1 }
 #define OPT_GROUP(h)                { OPTION_GROUP, 0, NULL, NULL, NULL, (h) }
 #define OPT_BIT(s, l, v, h, b)      OPT_BIT_F(s, l, v, h, b, 0)
 #define OPT_BITOP(s, l, v, h, set, clear) { OPTION_BITOP, (s), (l), (v), NULL, (h), \
index 2051ce57db735c9e5f353c9ae2a98ff6056246d6..a282b6ff13e56196a36b951b4a9f7540f5ba2666 100644 (file)
@@ -134,7 +134,6 @@ int cmd__parse_options(int argc, const char **argv)
                OPT_NOOP_NOARG(0, "obsolete"),
                OPT_STRING_LIST(0, "list", &list, "str", "add str to list"),
                OPT_GROUP("Magic arguments"),
-               OPT_ARGUMENT("quux", NULL, "means --quux"),
                OPT_NUMBER_CALLBACK(&integer, "set integer to NUM",
                        number_callback),
                { OPTION_COUNTUP, '+', NULL, &boolean, NULL, "same as -b",
index ad4746d899a48b6eef46f7690d291c0ec6411d5b..da310ed29b15b320916a0eea8181e3b4c5211f64 100755 (executable)
@@ -37,7 +37,6 @@ String options
     --list <str>          add str to list
 
 Magic arguments
-    --quux                means --quux
     -NUM                  set integer to NUM
     +                     same as -b
     --ambiguous           positive ambiguity
@@ -263,10 +262,6 @@ test_expect_success 'detect possible typos' '
        test_cmp typo.err output.err
 '
 
-test_expect_success 'keep some options as arguments' '
-       test-tool parse-options --expect="arg 00: --quux" --quux
-'
-
 cat >expect <<\EOF
 Callback: "four", 0
 boolean: 5