The bash completion script wants to know what the long options are for a
certain command at runtime. Add a magical long option that nobody could
possibly ever use (--dump-raw-long-options) to get this information.
Some example output:
$ git clone --dump-raw-long-options
--no-verbose --no-quiet --progress --no-progress --no-checkout
--checkout --bare --no-bare --mirror --no-mirror --local --no-local
--no-hardlinks --hardlinks --shared --no-shared --recursive
--no-recursive --recurse-submodules --no-recurse-submodules --template=
--no-template --reference= --no-reference --origin= --no-origin
--branch= --no-branch --upload-pack= --no-upload-pack --depth=
--no-depth --single-branch --no-single-branch --separate-git-dir=
--no-separate-git-dir --config= --no-config
Signed-off-by: Stephen Boyd <bebarino@xxxxxxxxx>
---
The name can be anything. This seemed sufficiently obscure.
parse-options.c | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/parse-options.c b/parse-options.c
index 850cfa7..6c37497 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -364,6 +364,45 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *,
const char * const *,
const struct option *, int, int);
+static int parse_options_raw(const struct option *opts)
+{
+ for (; opts->type != OPTION_END; opts++) {
+ if (opts->flags & PARSE_OPT_HIDDEN)
+ continue;
+ if (!opts->long_name)
+ continue;
+ switch (opts->type) {
+ case OPTION_BIT:
+ case OPTION_NEGBIT:
+ case OPTION_COUNTUP:
+ case OPTION_SET_INT:
+ case OPTION_SET_PTR:
+ fprintf(stdout, "--%s ", opts->long_name);
+ break;
+ case OPTION_LOWLEVEL_CALLBACK:
+ case OPTION_STRING:
+ case OPTION_FILENAME:
+ case OPTION_INTEGER:
+ case OPTION_CALLBACK:
+ if (opts->flags & PARSE_OPT_OPTARG)
+ fprintf(stdout, "--%s ", opts->long_name);
+ else if (!(opts->flags & PARSE_OPT_NOARG))
+ fprintf(stdout, "--%s= ", opts->long_name);
+ break;
+ default:
+ continue;
+ }
+ if (!(opts->flags & PARSE_OPT_NONEG)) {
+ if (!prefixcmp(opts->long_name, "no-"))
+ fprintf(stdout, "--%s ", opts->long_name + 3);
+ else
+ fprintf(stdout, "--no-%s ", opts->long_name);
+ }
+ }
+
+ return PARSE_OPT_HELP;
+}
+
int parse_options_step(struct parse_opt_ctx_t *ctx,
const struct option *options,
const char * const usagestr[])
@@ -431,6 +470,8 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
return usage_with_options_internal(ctx, usagestr, options, 1, 0);
if (internal_help && !strcmp(arg + 2, "help"))
return parse_options_usage(ctx, usagestr, options, 0);
+ if (!strcmp(arg + 2, "dump-raw-long-options"))
+ return parse_options_raw(options);
switch (parse_long_opt(ctx, arg + 2, options)) {
case -1:
return parse_options_usage(ctx, usagestr, options, 1);
--
1.7.10.128.g7945c.dirty
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Newbies FAQ] [Linux Kernel Development] [Free Online Dating] [Gcc Help] [IETF Annouce] [DCCP] [Netdev] [Networking] [Security] [V4L] [Bugtraq] [Free Online Dating] [Photo] [Yosemite] [MIPS Linux] [ARM Linux] [Linux Security] [Linux RAID] [Linux SCSI] [Fedora Users] [Linux Resources]