summaryrefslogtreecommitdiff
path: root/parse-options.c
diff options
context:
space:
mode:
authorPierre Habouzit <madcoder@debian.org>2007-11-19 09:21:44 (GMT)
committerJunio C Hamano <gitster@pobox.com>2007-11-23 06:11:28 (GMT)
commitdd3bf0f4a5bab17011e94bfeb808ee64dd2ad040 (patch)
tree0d0602508bf287ffd733b685f5bed6750a057fe3 /parse-options.c
parent31e7bded608416e3116f9c691a4d4314f10640b6 (diff)
downloadgit-dd3bf0f4a5bab17011e94bfeb808ee64dd2ad040.zip
git-dd3bf0f4a5bab17011e94bfeb808ee64dd2ad040.tar.gz
git-dd3bf0f4a5bab17011e94bfeb808ee64dd2ad040.tar.bz2
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>
Diffstat (limited to 'parse-options.c')
-rw-r--r--parse-options.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/parse-options.c b/parse-options.c
index d3e608a..e12b428 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -216,6 +216,9 @@ is_abbreviated:
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,
const char * const usagestr[], int flags)
{
@@ -249,6 +252,8 @@ int parse_options(int argc, const char **argv, const struct option *options,
break;
}
+ if (!strcmp(arg + 2, "help-all"))
+ usage_with_options_internal(usagestr, options, 1);
if (!strcmp(arg + 2, "help"))
usage_with_options(usagestr, 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_GAP 2
-void usage_with_options(const char * const *usagestr,
- const struct option *opts)
+void usage_with_options_internal(const char * const *usagestr,
+ const struct option *opts, int full)
{
fprintf(stderr, "usage: %s\n", *usagestr++);
while (*usagestr && **usagestr)
@@ -285,6 +290,8 @@ void usage_with_options(const char * const *usagestr,
fprintf(stderr, "%s\n", opts->help);
continue;
}
+ if (!full && (opts->flags & PARSE_OPT_HIDDEN))
+ continue;
pos = fprintf(stderr, " ");
if (opts->short_name)
@@ -335,6 +342,12 @@ void usage_with_options(const char * const *usagestr,
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 -----*/
#include "cache.h"