git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stephen Boyd <bebarino@gmail.com>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: "Junio C Hamano" <gitster@pobox.com>,
	"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>,
	git@vger.kernel.org, "Pierre Habouzit" <madcoder@debian.org>
Subject: Re: [PATCH 1/4] parse-options: allow git commands to invent new option types
Date: Mon, 25 Oct 2010 03:31:03 -0700	[thread overview]
Message-ID: <4CC55C67.8080908@gmail.com> (raw)
In-Reply-To: <20101024081507.GB29630@burratino>

On 10/24/10 01:15, Jonathan Nieder wrote:
> diff --git a/parse-options.c b/parse-options.c
> index 0fa79bc..7907306 100644
> --- a/parse-options.c
> +++ b/parse-options.c
> @@ -8,9 +8,6 @@ static int parse_options_usage(struct parse_opt_ctx_t *ctx,
>  			       const char * const *usagestr,
>  			       const struct option *opts, int err);
>  
> -#define OPT_SHORT 1
> -#define OPT_UNSET 2
> -
>  static int opterror(const struct option *opt, const char *reason, int flags)
>  {
>  	if (flags & OPT_SHORT)
> @@ -51,6 +48,9 @@ static int get_value(struct parse_opt_ctx_t *p,
>  	const int unset = flags & OPT_UNSET;
>  	int err;
>  
> +	if (opt->type == OPTION_LOWLEVEL_CALLBACK)
> +		return (*(parse_opt_ll_cb *)opt->callback)(p, opt, flags);
> +

(I read patch 4 before this one)

Being able to modify the context within a callback is nice. Having to
know if the option is short or long and and checking for validity seems
like something that should be handled within the parse options library
itself.

Is there an actual use case where someone needs to completely override
get_value()? If you move this into the case statement then we get the
generic error checking of get_value() with the benefits of being able to
modify the context within a callback. We could also probably use the
return value of the low level callback to indicate whether or not to
take some action after parsing the option. Perhaps something like
quiting the option parsing loop when encountering such an option?

This reminds me, we can probably simplify that "takes no value" error
path in get_value() (see below).

> diff --git a/parse-options.h b/parse-options.h
> index d982f0f..fa400da 100644
> --- a/parse-options.h
> +++ b/parse-options.h
> @@ -17,6 +17,7 @@ enum parse_opt_type {
>  	OPTION_STRING,
>  	OPTION_INTEGER,
>  	OPTION_CALLBACK,
> +	OPTION_LOWLEVEL_CALLBACK,
>  	OPTION_FILENAME
>  };

Don't forget to document what this option does in the comments of this
file and in api-parse-options.txt

>  
> @@ -40,8 +41,16 @@ enum parse_opt_option_flags {
>  	PARSE_OPT_SHELL_EVAL = 256
>  };
>  
> +enum parse_opt_ll_flags {
> +	OPT_SHORT = 1,
> +	OPT_UNSET = 2
> +};
> +

I hope this isn't necessary.

Hope this pasted ok.
--->8----

diff --git a/parse-options.c b/parse-options.c
index 0fa79bc..7234c11 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -56,22 +56,8 @@ static int get_value(struct parse_opt_ctx_t *p,
        if (unset && (opt->flags & PARSE_OPT_NONEG))
                return opterror(opt, "isn't available", flags);

-       if (!(flags & OPT_SHORT) && p->opt) {
-               switch (opt->type) {
-               case OPTION_CALLBACK:
-                       if (!(opt->flags & PARSE_OPT_NOARG))
-                               break;
-                       /* FALLTHROUGH */
-               case OPTION_BOOLEAN:
-               case OPTION_BIT:
-               case OPTION_NEGBIT:
-               case OPTION_SET_INT:
-               case OPTION_SET_PTR:
+       if (!(flags & OPT_SHORT) && p->opt && (opt->flags &
PARSE_OPT_NOARG))
                        return opterror(opt, "takes no value", flags);
-               default:
-                       break;
-               }
-       }

        switch (opt->type) {
        case OPTION_BIT:

  reply	other threads:[~2010-10-25 10:31 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-20  3:11 [PATCH v2 1/4] setup_git_env: print the true $GIT_DIR for debugging Nguyễn Thái Ngọc Duy
2010-10-20  3:11 ` [PATCH v2 2/4] run_builtin(): save "-h" detection result for later use Nguyễn Thái Ngọc Duy
2010-10-21 22:57   ` Junio C Hamano
2010-10-22  1:47     ` Nguyen Thai Ngoc Duy
2010-10-20  3:11 ` [PATCH v2 3/4] builtins: utilize startup_info->help where possible Nguyễn Thái Ngọc Duy
2010-10-20  3:12 ` [PATCH v2 4/4] builtins: check for startup_info->help, print and exit early Nguyễn Thái Ngọc Duy
2010-10-22  6:38   ` [PATCH en/and-cascade-tests 0/7] Jonathan Nieder
2010-10-22  6:42     ` [PATCH 1/7] branch -h: show usage even in an invalid repository Jonathan Nieder
2010-10-22 18:30       ` Junio C Hamano
2010-10-24  7:20         ` Jonathan Nieder
2010-10-24  8:13           ` [RFC/PATCH 0/4] update-index: migrate to parse-options API Jonathan Nieder
2010-10-24  8:15             ` [PATCH 1/4] parse-options: allow git commands to invent new option types Jonathan Nieder
2010-10-25 10:31               ` Stephen Boyd [this message]
2010-11-29  4:03                 ` Jonathan Nieder
2010-10-24  8:15             ` [PATCH 2/4] parse-options: make resuming easier after PARSE_OPT_STOP_AT_NON_OPTION Jonathan Nieder
2010-10-24  8:16             ` [PATCH 3/4] setup: save prefix (original cwd relative to toplevel) in startup_info Jonathan Nieder
2010-10-24  8:18             ` [PATCH 4/4] update-index: migrate to parse-options API Jonathan Nieder
2010-10-25 10:30               ` Stephen Boyd
2010-11-30  2:34                 ` Jonathan Nieder
2010-10-24 12:50             ` [RFC/PATCH 0/4] " Nguyen Thai Ngoc Duy
2010-10-27  4:19             ` Junio C Hamano
2010-11-30  2:52             ` [PATCH/RFCv2 0/6] " Jonathan Nieder
2010-11-30  2:55               ` [PATCH 1/6] parse-options: sanity check PARSE_OPT_NOARG flag Jonathan Nieder
2010-11-30  8:13                 ` Stephen Boyd
2010-12-01 23:01                   ` Junio C Hamano
2010-12-03  7:35                     ` Stephen Boyd
2010-12-01 23:36                   ` Junio C Hamano
2010-11-30  3:04               ` [PATCH 2/6] parse-options: do not infer PARSE_OPT_NOARG from option type Jonathan Nieder
2010-11-30  8:13                 ` Stephen Boyd
2010-11-30  3:08               ` [PATCH 3/6] parse-options: allow git commands to invent new option types Jonathan Nieder
2010-11-30  3:09               ` [PATCH 4/6] parse-options: make resuming easier after PARSE_OPT_STOP_AT_NON_OPTION Jonathan Nieder
2010-11-30  3:10               ` [PATCH 5/6] setup: save prefix (original cwd relative to toplevel) in startup_info Jonathan Nieder
2010-11-30  3:15               ` [PATCH 6/6] update-index: migrate to parse-options API Jonathan Nieder
2010-11-30  8:13                 ` Stephen Boyd
2010-11-30 16:00                   ` [PATCH] parse-options: always show arghelp when LITERAL_ARGHELP is set Jonathan Nieder
2010-10-22  6:44     ` [PATCH 2/7] checkout-index -h: show usage even in an invalid repository Jonathan Nieder
2010-10-22  6:45     ` [PATCH 3/7] commit/status -h: show usage even with broken configuration Jonathan Nieder
2010-10-22  6:47     ` [PATCH 4/7] gc " Jonathan Nieder
2010-10-22  6:48     ` [PATCH 5/7] ls-files -h: show usage even with corrupt index Jonathan Nieder
2010-10-22 18:30       ` Junio C Hamano
2010-10-22  6:49     ` [PATCH 6/7] merge " Jonathan Nieder
2010-10-22 18:31       ` Junio C Hamano
2010-10-22  6:51     ` [PATCH 7/7] update-index " Jonathan Nieder
2010-10-22  6:55     ` [PATCH en/and-cascade-tests 0/7] avoid repository access during "git <foo> -h" Jonathan Nieder
2010-10-22 11:23     ` [PATCH en/and-cascade-tests 0/7] Nguyen Thai Ngoc Duy

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4CC55C67.8080908@gmail.com \
    --to=bebarino@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    --cc=madcoder@debian.org \
    --cc=pclouds@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.
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 NNTP newsgroup(s).