From: Duy Nguyen <pclouds@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Johannes Schindelin" <Johannes.Schindelin@gmx.de>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Git Mailing List" <git@vger.kernel.org>,
"Denton Liu" <liu.denton@gmail.com>
Subject: Re: [PATCH] parse-options: don't emit "ambiguous option" for aliases
Date: Mon, 22 Apr 2019 19:34:40 +0700 [thread overview]
Message-ID: <CACsJy8ByLxUn8vgSmkPJQvO5vV-=vSwyP=ug3QKJL7hhD11-KA@mail.gmail.com> (raw)
In-Reply-To: <20190422122250.15248-1-pclouds@gmail.com>
On Mon, Apr 22, 2019 at 7:23 PM Nguyễn Thái Ngọc Duy <pclouds@gmail.com> wrote:
> @@ -574,6 +615,70 @@ static int show_gitcomp(struct parse_opt_ctx_t *ctx,
> return PARSE_OPT_COMPLETE;
> }
>
> +/*
> + * Scan and may produce a new option[] array, which should be used
> + * instead of the original 'options'.
> + *
> + * Right now this is only used to preprocess and substitue
> + * OPTION_ALIAS.
> + */
> +static struct option *preprocess_options(struct parse_opt_ctx_t *ctx,
> + const struct option *options)
> +{
> + struct option *newopt;
> + int i, nr, alias;
> + int nr_aliases = 0;
> +
> + for (nr = 0; options[nr].type != OPTION_END; nr++) {
> + if (options[nr].type == OPTION_ALIAS)
> + nr_aliases++;
> + }
> +
> + if (!nr_aliases)
> + return NULL;
> +
> + ALLOC_ARRAY(newopt, nr + 1);
> + COPY_ARRAY(newopt, options, nr + 1);
> +
> + /* each alias has two string pointers and NULL */
> + CALLOC_ARRAY(ctx->alias_groups, 3 * (nr_aliases + 1));
> +
> + for (alias = 0, i = 0; i < nr; i++) {
> + const char *source;
> + int j;
> +
> + if (newopt[i].type != OPTION_ALIAS)
> + continue;
> +
> + if (!newopt[i].long_name)
> + BUG("An alias must have long option name");
> +
> + source = newopt[i].value;
> +
> + for (j = 0; j < nr; j++) {
> + const char *name = options[j].long_name;
> +
> + if (!name || strcmp(name, source))
> + continue;
> +
> + if (options[j].type == OPTION_ALIAS)
> + BUG("No please. Nested aliases are not supported.");
> +
> + memcpy(newopt + i, options + j, sizeof(*newopt));
Eck. I need to restore newopt[i].long_name and .short_name after this
memcpy, or we'll just have two --recurse-submodules instead. Luckily
it still works after this bug is gone.
> + break;
> + }
--
Duy
next prev parent reply other threads:[~2019-04-22 12:35 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-25 18:14 [PATCH 0/8] Do not use abbreviated options in tests Johannes Schindelin via GitGitGadget
2019-03-25 18:14 ` [PATCH 1/8] tests (rebase): spell out the `--keep-empty` option Johannes Schindelin via GitGitGadget
2019-03-25 18:14 ` [PATCH 2/8] tests (rebase): spell out the `--force-rebase` option Johannes Schindelin via GitGitGadget
2019-03-25 18:14 ` [PATCH 3/8] t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match` Johannes Schindelin via GitGitGadget
2019-03-25 18:14 ` [PATCH 4/8] t5531: avoid using an abbreviated option Johannes Schindelin via GitGitGadget
2019-03-25 18:14 ` [PATCH 5/8] tests (push): do not abbreviate the `--follow-tags` option Johannes Schindelin via GitGitGadget
2019-03-25 18:14 ` [PATCH 6/8] tests (status): spell out the `--find-renames` option in full Johannes Schindelin via GitGitGadget
2019-03-25 18:14 ` [PATCH 7/8] tests (pack-objects): use the full, unabbreviated `--revs` option Johannes Schindelin via GitGitGadget
2019-03-25 18:14 ` [PATCH 8/8] tests: disallow the use of abbreviated options (by default) Johannes Schindelin via GitGitGadget
2019-03-25 18:35 ` Denton Liu
2019-03-25 20:26 ` Ævar Arnfjörð Bjarmason
2019-04-12 8:48 ` Johannes Schindelin
2019-04-12 8:50 ` Johannes Schindelin
2019-03-25 19:47 ` Ævar Arnfjörð Bjarmason
2019-04-12 8:59 ` Johannes Schindelin
2019-03-25 20:23 ` [PATCH 0/2] allow for configuring option abbreviation + fix Ævar Arnfjörð Bjarmason
2019-03-25 20:23 ` [PATCH 1/2] parse-options: allow for configuring option abbreviation Ævar Arnfjörð Bjarmason
2019-03-25 21:23 ` Eric Sunshine
2019-03-25 22:47 ` Ævar Arnfjörð Bjarmason
2019-03-26 4:14 ` Duy Nguyen
2019-03-26 6:28 ` Ævar Arnfjörð Bjarmason
2019-03-26 7:13 ` Duy Nguyen
2019-03-26 11:00 ` Ævar Arnfjörð Bjarmason
2019-04-01 10:47 ` Junio C Hamano
2019-04-12 9:06 ` Johannes Schindelin
2019-03-25 20:23 ` [PATCH 2/2] parse-options: don't emit "ambiguous option" for aliases Ævar Arnfjörð Bjarmason
2019-04-17 12:44 ` [PATCH v2] " Ævar Arnfjörð Bjarmason
2019-04-17 16:04 ` Duy Nguyen
2019-04-18 0:48 ` Junio C Hamano
2019-04-18 9:29 ` Duy Nguyen
2019-04-19 4:39 ` Junio C Hamano
2019-04-22 12:22 ` [PATCH] " Nguyễn Thái Ngọc Duy
2019-04-22 12:34 ` Duy Nguyen [this message]
2019-04-29 10:05 ` [PATCH v2] " Nguyễn Thái Ngọc Duy
2019-05-07 3:43 ` Junio C Hamano
2019-05-07 11:58 ` Duy Nguyen
2019-04-02 0:58 ` [PATCH 0/8] Do not use abbreviated options in tests Junio C Hamano
2019-04-12 9:37 ` [PATCH v2 " Johannes Schindelin via GitGitGadget
2019-04-12 9:37 ` [PATCH v2 1/8] tests (rebase): spell out the `--keep-empty` option Johannes Schindelin via GitGitGadget
2019-04-12 9:37 ` [PATCH v2 2/8] tests (rebase): spell out the `--force-rebase` option Johannes Schindelin via GitGitGadget
2019-04-12 9:37 ` [PATCH v2 3/8] t7810: do not abbreviate `--no-exclude-standard` nor `--invert-match` Johannes Schindelin via GitGitGadget
2019-04-12 9:37 ` [PATCH v2 4/8] t5531: avoid using an abbreviated option Johannes Schindelin via GitGitGadget
2019-04-12 9:37 ` [PATCH v2 5/8] tests (push): do not abbreviate the `--follow-tags` option Johannes Schindelin via GitGitGadget
2019-04-12 9:37 ` [PATCH v2 6/8] tests (status): spell out the `--find-renames` option in full Johannes Schindelin via GitGitGadget
2019-04-12 9:37 ` [PATCH v2 7/8] tests (pack-objects): use the full, unabbreviated `--revs` option Johannes Schindelin via GitGitGadget
2019-04-12 9:37 ` [PATCH v2 8/8] tests: disallow the use of abbreviated options (by default) Johannes Schindelin via GitGitGadget
2019-04-14 2:35 ` Junio C Hamano
2019-04-15 2:55 ` Junio C Hamano
2019-04-15 13:09 ` Johannes Schindelin
2019-04-15 13:45 ` Junio C Hamano
2019-04-17 12:07 ` Johannes Schindelin
2019-04-15 13:08 ` Johannes Schindelin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CACsJy8ByLxUn8vgSmkPJQvO5vV-=vSwyP=ug3QKJL7hhD11-KA@mail.gmail.com' \
--to=pclouds@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=liu.denton@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).