Skip to content

Commit 1782abd

Browse files
committed
parse-options: add show_usage_with_options_if_asked()
Many commands call usage_with_options() when they are asked to give the help message, but it sends the help text to the standard error stream. When the user asked for it with "git cmd -h", the help message is the primary output from the command, hence we should send it to the standard output stream, instead. Introduce a helper function that captures the common pattern if (argc == 2 && !strcmp(argv[1], "-h")) usage_with_options(usage, options); and replaces it with show_usage_with_options_if_asked(argc, argv, usage, options); to help correct code paths. Note that this helper function still exits with status 129, and t0012 insists on it. After converting all the mistaken callers of usage_with_options() to call this new helper, we may want to address it---the end user is asking us to give the help text, and we are doing exactly as asked, so there is no reason to exit with non-zero status. Suggested-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent e4c0a14 commit 1782abd

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

parse-options.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,6 +1282,16 @@ void NORETURN usage_with_options(const char * const *usagestr,
12821282
exit(129);
12831283
}
12841284

1285+
void show_usage_with_options_if_asked(int ac, const char **av,
1286+
const char * const *usagestr,
1287+
const struct option *opts)
1288+
{
1289+
if (ac == 2 && !strcmp(av[1], "-h")) {
1290+
usage_with_options_internal(NULL, usagestr, opts, 0, 0);
1291+
exit(129);
1292+
}
1293+
}
1294+
12851295
void NORETURN usage_msg_opt(const char *msg,
12861296
const char * const *usagestr,
12871297
const struct option *options)

parse-options.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,10 @@ int parse_options(int argc, const char **argv, const char *prefix,
402402
NORETURN void usage_with_options(const char * const *usagestr,
403403
const struct option *options);
404404

405+
void show_usage_with_options_if_asked(int ac, const char **av,
406+
const char * const *usage,
407+
const struct option *options);
408+
405409
NORETURN void usage_msg_opt(const char *msg,
406410
const char * const *usagestr,
407411
const struct option *options);

0 commit comments

Comments
 (0)