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:
parent
31e7bded60
commit
dd3bf0f4a5
@ -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"
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user