diff --git a/builtin/blame.c b/builtin/blame.c index ffbd3ce5c5..65d43c7d48 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1013,6 +1013,7 @@ int cmd_blame(int argc, case PARSE_OPT_UNKNOWN: break; case PARSE_OPT_HELP: + case PARSE_OPT_HELP_ERROR: case PARSE_OPT_ERROR: case PARSE_OPT_SUBCOMMAND: exit(129); diff --git a/builtin/shortlog.c b/builtin/shortlog.c index 6b2a0b93b5..cd262bd376 100644 --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@ -433,6 +433,7 @@ int cmd_shortlog(int argc, case PARSE_OPT_UNKNOWN: break; case PARSE_OPT_HELP: + case PARSE_OPT_HELP_ERROR: case PARSE_OPT_ERROR: case PARSE_OPT_SUBCOMMAND: exit(129); diff --git a/builtin/update-index.c b/builtin/update-index.c index 3d6646c318..ac4610ec94 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -1133,6 +1133,7 @@ int cmd_update_index(int argc, break; switch (parseopt_state) { case PARSE_OPT_HELP: + case PARSE_OPT_HELP_ERROR: case PARSE_OPT_ERROR: exit(129); case PARSE_OPT_COMPLETE: diff --git a/parse-options.c b/parse-options.c index f4647e0099..fd8ceed82b 100644 --- a/parse-options.c +++ b/parse-options.c @@ -583,7 +583,7 @@ static enum parse_opt_result parse_long_opt( ambiguous.option->long_name, (abbrev.flags & OPT_UNSET) ? "no-" : "", abbrev.option->long_name); - return PARSE_OPT_HELP; + return PARSE_OPT_HELP_ERROR; } if (abbrev.option) { if (*arg_end) @@ -1037,6 +1037,7 @@ enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx, usage_with_options(usagestr, options); case PARSE_OPT_COMPLETE: case PARSE_OPT_HELP: + case PARSE_OPT_HELP_ERROR: case PARSE_OPT_ERROR: case PARSE_OPT_DONE: case PARSE_OPT_NON_OPTION: @@ -1072,6 +1073,7 @@ enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx, case PARSE_OPT_NON_OPTION: case PARSE_OPT_SUBCOMMAND: case PARSE_OPT_HELP: + case PARSE_OPT_HELP_ERROR: case PARSE_OPT_COMPLETE: BUG("parse_short_opt() cannot return these"); case PARSE_OPT_DONE: @@ -1099,6 +1101,7 @@ enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx, case PARSE_OPT_SUBCOMMAND: case PARSE_OPT_COMPLETE: case PARSE_OPT_HELP: + case PARSE_OPT_HELP_ERROR: BUG("parse_short_opt() cannot return these"); case PARSE_OPT_DONE: break; @@ -1132,6 +1135,7 @@ enum parse_opt_result parse_options_step(struct parse_opt_ctx_t *ctx, case PARSE_OPT_UNKNOWN: goto unknown; case PARSE_OPT_HELP: + case PARSE_OPT_HELP_ERROR: goto show_usage; case PARSE_OPT_NON_OPTION: case PARSE_OPT_SUBCOMMAND: @@ -1197,6 +1201,7 @@ int parse_options(int argc, const char **argv, parse_options_start_1(&ctx, argc, argv, prefix, options, flags); switch (parse_options_step(&ctx, options, usagestr)) { case PARSE_OPT_HELP: + case PARSE_OPT_HELP_ERROR: case PARSE_OPT_ERROR: exit(129); case PARSE_OPT_COMPLETE: @@ -1363,7 +1368,7 @@ static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t parse_options_check_harder(opts); if (!usagestr) - return PARSE_OPT_HELP; + return err ? PARSE_OPT_HELP_ERROR : PARSE_OPT_HELP; if (!err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL) fprintf(outfile, "cat <<\\EOF\n"); @@ -1476,7 +1481,7 @@ static enum parse_opt_result usage_with_options_internal(struct parse_opt_ctx_t if (!err && ctx && ctx->flags & PARSE_OPT_SHELL_EVAL) fputs("EOF\n", outfile); - return PARSE_OPT_HELP; + return err ? PARSE_OPT_HELP_ERROR : PARSE_OPT_HELP; } void NORETURN usage_with_options(const char * const *usagestr, diff --git a/parse-options.h b/parse-options.h index 0d1f738f8d..3ec8ba5cc8 100644 --- a/parse-options.h +++ b/parse-options.h @@ -57,7 +57,8 @@ enum parse_opt_option_flags { }; enum parse_opt_result { - PARSE_OPT_COMPLETE = -3, + PARSE_OPT_COMPLETE = -4, + PARSE_OPT_HELP_ERROR = -3, PARSE_OPT_HELP = -2, PARSE_OPT_ERROR = -1, /* must be the same as error() */ PARSE_OPT_DONE = 0, /* fixed so that "return 0" works */