parse-options: Allow to hide options from the default usage.

This is useful for backward-compatibility aliases, or very advanced command
line switches introduced for internal git usages and have no real use for a
user.

parse-options still shows them if the user asks for --help-all.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Pierre Habouzit 2007-11-19 10:21:44 +01:00 committed by Junio C Hamano
parent 31e7bded60
commit dd3bf0f4a5
2 changed files with 18 additions and 2 deletions

View File

@ -216,6 +216,9 @@ is_abbreviated:
return error("unknown option `%s'", arg); return error("unknown option `%s'", arg);
} }
static NORETURN void usage_with_options_internal(const char * const *,
const struct option *, int);
int parse_options(int argc, const char **argv, const struct option *options, int parse_options(int argc, const char **argv, const struct option *options,
const char * const usagestr[], int flags) const char * const usagestr[], int flags)
{ {
@ -249,6 +252,8 @@ int parse_options(int argc, const char **argv, const struct option *options,
break; break;
} }
if (!strcmp(arg + 2, "help-all"))
usage_with_options_internal(usagestr, options, 1);
if (!strcmp(arg + 2, "help")) if (!strcmp(arg + 2, "help"))
usage_with_options(usagestr, options); usage_with_options(usagestr, options);
if (parse_long_opt(&args, arg + 2, options)) if (parse_long_opt(&args, arg + 2, options))
@ -263,8 +268,8 @@ int parse_options(int argc, const char **argv, const struct option *options,
#define USAGE_OPTS_WIDTH 24 #define USAGE_OPTS_WIDTH 24
#define USAGE_GAP 2 #define USAGE_GAP 2
void usage_with_options(const char * const *usagestr, void usage_with_options_internal(const char * const *usagestr,
const struct option *opts) const struct option *opts, int full)
{ {
fprintf(stderr, "usage: %s\n", *usagestr++); fprintf(stderr, "usage: %s\n", *usagestr++);
while (*usagestr && **usagestr) while (*usagestr && **usagestr)
@ -285,6 +290,8 @@ void usage_with_options(const char * const *usagestr,
fprintf(stderr, "%s\n", opts->help); fprintf(stderr, "%s\n", opts->help);
continue; continue;
} }
if (!full && (opts->flags & PARSE_OPT_HIDDEN))
continue;
pos = fprintf(stderr, " "); pos = fprintf(stderr, " ");
if (opts->short_name) if (opts->short_name)
@ -335,6 +342,12 @@ void usage_with_options(const char * const *usagestr,
exit(129); exit(129);
} }
void usage_with_options(const char * const *usagestr,
const struct option *opts)
{
usage_with_options_internal(usagestr, opts, 0);
}
/*----- some often used options -----*/ /*----- some often used options -----*/
#include "cache.h" #include "cache.h"

View File

@ -24,6 +24,7 @@ enum parse_opt_option_flags {
PARSE_OPT_OPTARG = 1, PARSE_OPT_OPTARG = 1,
PARSE_OPT_NOARG = 2, PARSE_OPT_NOARG = 2,
PARSE_OPT_NONEG = 4, PARSE_OPT_NONEG = 4,
PARSE_OPT_HIDDEN = 8,
}; };
struct option; struct option;
@ -57,6 +58,8 @@ typedef int parse_opt_cb(const struct option *, const char *arg, int unset);
* PARSE_OPT_OPTARG: says that the argument is optionnal (not for BOOLEANs) * PARSE_OPT_OPTARG: says that the argument is optionnal (not for BOOLEANs)
* PARSE_OPT_NOARG: says that this option takes no argument, for CALLBACKs * PARSE_OPT_NOARG: says that this option takes no argument, for CALLBACKs
* PARSE_OPT_NONEG: says that this option cannot be negated * PARSE_OPT_NONEG: says that this option cannot be negated
* PARSE_OPT_HIDDEN this option is skipped in the default usage, showed in
* the long one.
* *
* `callback`:: * `callback`::
* pointer to the callback to use for OPTION_CALLBACK. * pointer to the callback to use for OPTION_CALLBACK.