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