Re: [RFC] Re: Convert 'git blame' to parse_options()
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 23, 2008, 21:23 UTC
- Message-ID
- <7vprq7hmkx.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <20080623210935.GC13395@artemis.madism.org>
Pierre Habouzit <madcoder@debian.org> writes:
Show 35 quoted lines
> With that, you write parsers this way:
>
> {
> struct parse_opt_ctx_t ctx;
>
> parse_options_start(&ctx, argc, argv, 0);
>
> for (;;) {
> const char *arg;
>
> switch (parse_options_step(&ctx, options, usagestr)) {
> case PARSE_OPT_HELP:
> /* dump your help here, the one for options/usagestr is already dumped */
> exit(129);
> case PARSE_OPT_DONE:
> goto done;
> }
>
> arg = *ctx->argv++;
> ctx->argc--;
>
> if (strcmp(arg, "-")) {
> /* you're on baby ! */
> } else if ....
> } else {
> error("unknown option %s", arg);
> parse_options_usage(options, usagestr);
> /* dump your help here */
> exit(129);
> }
> }
>
> done:
> argc = parse_options_end(&ctx);
> }Nice. I have started doing the same (insignificant details are different; e.g. I used "positive is unknown" convention instead ) and then the solution is sitting in my mbox ;-)