Skip to content

Commit

Permalink
parse-opt: bring PARSE_OPT_HIDDEN and NONEG to git-rev-parse --parseopt
Browse files Browse the repository at this point in the history
Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Pierre Habouzit authored and Junio C Hamano committed Mar 2, 2008
1 parent c149184 commit ff962a3
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 16 deletions.
17 changes: 12 additions & 5 deletions Documentation/git-rev-parse.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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>`::
Expand All @@ -334,10 +334,17 @@ 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 of `*`, `=`, `?` or `!`.
* Use `=` if the option takes 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].

* Use `!` to not make the corresponding negated long option available.

The remainder of the line, after stripping the spaces, is used
as the help associated to the option.
Expand Down
28 changes: 17 additions & 11 deletions builtin-rev-parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,18 +322,24 @@ 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_NONEG;
break;
case '*':
o->flags |= PARSE_OPT_HIDDEN;
break;
}
}

if (s - sb.buf == 1) /* short option only */
Expand Down

0 comments on commit ff962a3

Please sign in to comment.