Git fork

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 <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

+14
+10
parse-options.c
··· 1282 1282 exit(129); 1283 1283 } 1284 1284 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 + 1285 1295 void NORETURN usage_msg_opt(const char *msg, 1286 1296 const char * const *usagestr, 1287 1297 const struct option *options)
+4
parse-options.h
··· 402 402 NORETURN void usage_with_options(const char * const *usagestr, 403 403 const struct option *options); 404 404 405 + void show_usage_with_options_if_asked(int ac, const char **av, 406 + const char * const *usage, 407 + const struct option *options); 408 + 405 409 NORETURN void usage_msg_opt(const char *msg, 406 410 const char * const *usagestr, 407 411 const struct option *options);