Re: [PATCH v3 01/13] parse-options: stop when encounter a non-option
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 12, 2010, 16:45 UTC
- Message-ID
- <7v630kd4ym.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <1278829141-11900-1-git-send-email-struggleyb.nku@gmail.com>
Bo Yang <struggleyb.nku@gmail.com> writes:
Show 8 quoted lines
> Subject: Re: [PATCH v3 01/13] parse-options: stop when encounter a non-option > > We support the syntax like: > -L n1,m1 pathspec1 -L n2,m2 pathspec2. > > Make the parse-options API not stop when encounter a > non-option argument, report the status and go on parsing > the remain options.
-ECANTPARSE
Read the above again and wonder...
Does it stop, like the subject line says, or does it not stop???
Perhaps you meant to say something like this...
Subject: [PATCH v3 01/13] parse-options: enhance STOP_AT_NON_OPTION
Make parse_options_step() report PARSE_OPT_NON_OPTION, instead of PARSE_OPT_DONE, to the caller, when it sees a non-option argument.
This will help implementing a nonstandard option syntax that takes more than one parameters to an option, e.g.
-L n1,m1 pathspec1 -L n2,m2 pathspec2
by directly calling parse_options_step(). The parse_options() API only calls parse_options_step() once, and its callers are not affected by this change.
Thanks-to: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Bo Yang <struggleyb.nku@gmail.com>
Currently blame and shortlog seems to use parse_options_step() but neither of them uses STOP_AT_NON_OPTION, so this change shouldn't break them.
Show 45 quoted lines
>
> Thanks-to: Jonathan Nieder <jrnieder@gmail.com>
> Signed-off-by: Bo Yang <struggleyb.nku@gmail.com>
> ---
> parse-options.c | 3 ++-
> parse-options.h | 3 ++-
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/parse-options.c b/parse-options.c
> index 0fa79bc..cbb49d3 100644
> --- a/parse-options.c
> +++ b/parse-options.c
> @@ -374,7 +374,7 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
> if (parse_nodash_opt(ctx, arg, options) == 0)
> continue;
> if (ctx->flags & PARSE_OPT_STOP_AT_NON_OPTION)
> - break;
> + return PARSE_OPT_NON_OPTION;
> ctx->out[ctx->cpidx++] = ctx->argv[0];
> continue;
> }
> @@ -456,6 +456,7 @@ int parse_options(int argc, const char **argv, const char *prefix,
> switch (parse_options_step(&ctx, options, usagestr)) {
> case PARSE_OPT_HELP:
> exit(129);
> + case PARSE_OPT_NON_OPTION:
> case PARSE_OPT_DONE:
> break;
> default: /* PARSE_OPT_UNKNOWN */
> diff --git a/parse-options.h b/parse-options.h
> index 7435cdb..407697a 100644
> --- a/parse-options.h
> +++ b/parse-options.h
> @@ -161,7 +161,8 @@ extern NORETURN void usage_msg_opt(const char *msg,
> enum {
> PARSE_OPT_HELP = -1,
> PARSE_OPT_DONE,
> - PARSE_OPT_UNKNOWN
> + PARSE_OPT_NON_OPTION,
> + PARSE_OPT_UNKNOWN,
> };
>
> /*
> --
> 1.7.0.2.273.gc2413.dirty