Signed-off-by: Pierre Habouzit <madcoder@xxxxxxxxxx> --- On ven, fév 22, 2008 at 06:19:28 +0000, Pierre Habouzit wrote: > On Fri, Feb 22, 2008 at 05:17:51PM +0000, Junio C Hamano wrote: > > I did not find accessible from the command line variant was the > > parse-opt-hidden feature, which was frustrating. > > Well, it's probably doable using some more magic flags, I can hack > something if you need to, I'll try to work something out during FOSDEM's > talks :) Here it is … I also made the parsing more extensible wrt new flags if needed. We should definitely write tests too. Documentation/git-rev-parse.txt | 15 ++++++++++----- builtin-rev-parse.c | 25 ++++++++++++++----------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt index f02f6bb..e961c20 100644 --- a/Documentation/git-rev-parse.txt +++ b/Documentation/git-rev-parse.txt @@ -325,7 +325,7 @@ The lines after the separator describe the options. Each line of options has this format: ------------ -<opt_spec><arg_spec>? SP+ help LF +<opt_spec><flags>? SP+ help LF ------------ `<opt_spec>`:: @@ -334,10 +334,15 @@ Each line of options has this format: is necessary. `h,help`, `dry-run` and `f` are all three correct `<opt_spec>`. -`<arg_spec>`:: - an `<arg_spec>` tells the option parser if the option has an argument - (`=`), an optional one (`?` though its use is discouraged) or none - (no `<arg_spec>` in that case). +`<flags>`:: + `<flags>` are any suite of `*`, `=` or `?`. + * Use `=` if the option take an argument. + + * Use `?` to mean that the option is optional (though its use is discouraged). + + * Use `*` to mean that this option should not be listed in the usage + generated for the `-h` argument. It's shown for `--help-all` as + documented in linkgit:gitcli[5]. The remainder of the line, after stripping the spaces, is used as the help associated to the option. diff --git a/builtin-rev-parse.c b/builtin-rev-parse.c index b9af1a5..5ffc4e0 100644 --- a/builtin-rev-parse.c +++ b/builtin-rev-parse.c @@ -322,18 +322,21 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix) o->type = OPTION_CALLBACK; o->help = xstrdup(skipspaces(s)); o->value = &parsed; + o->flags = PARSE_OPT_NOARG; o->callback = &parseopt_dump; - switch (s[-1]) { - case '=': - s--; - break; - case '?': - o->flags = PARSE_OPT_OPTARG; - s--; - break; - default: - o->flags = PARSE_OPT_NOARG; - break; + while (s > sb.buf && strchr("*=?", s[-1])) { + switch (*--s) { + case '=': + o->flags &= ~PARSE_OPT_NOARG; + break; + case '?': + o->flags &= ~PARSE_OPT_NOARG; + o->flags |= PARSE_OPT_OPTARG; + break; + case '*': + o->flags &= PARSE_OPT_HIDDEN; + break; + } } if (s - sb.buf == 1) /* short option only */ -- 1.5.4.2.281.g28d0e
Attachment:
pgpQtVgDTYGVZ.pgp
Description: PGP signature