1
0
mirror of https://github.com/git/git.git synced 2025-02-06 09:44:30 +00:00

usage: add show_usage_if_asked()

Some commands call usage() when they are asked to give the help
message with "git cmd -h", but this has the same problem as we
fixed with callers of usage_with_options() for the same purpose.

Introduce a helper function that captures the common pattern

	if (argc == 2 && !strcmp(argv[1], "-h"))
		usage(usage);

and replaces it with

	show_usage_if_asked(argc, argv, usage);

to help correct these 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.

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2025-01-16 13:35:50 -08:00
parent 1782abd773
commit 0148fd836a
2 changed files with 26 additions and 3 deletions

View File

@ -701,6 +701,8 @@ int error_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
void show_usage_if_asked(int ac, const char **av, const char *err);
#ifndef NO_OPENSSL
#ifdef APPLE_COMMON_CRYPTO
#include "compat/apple-common-crypto.h"

27
usage.c
View File

@ -8,7 +8,7 @@
#include "gettext.h"
#include "trace2.h"
static void vreportf(const char *prefix, const char *err, va_list params)
static void vfreportf(FILE *f, const char *prefix, const char *err, va_list params)
{
char msg[4096];
char *p, *pend = msg + sizeof(msg);
@ -32,8 +32,13 @@ static void vreportf(const char *prefix, const char *err, va_list params)
}
*(p++) = '\n'; /* we no longer need a NUL */
fflush(stderr);
write_in_full(2, msg, p - msg);
fflush(f);
write_in_full(fileno(f), msg, p - msg);
}
static void vreportf(const char *prefix, const char *err, va_list params)
{
vfreportf(stderr, prefix, err, params);
}
static NORETURN void usage_builtin(const char *err, va_list params)
@ -173,6 +178,22 @@ void NORETURN usage(const char *err)
usagef("%s", err);
}
static void show_usage_if_asked_helper(const char *err, ...)
{
va_list params;
va_start(params, err);
vfreportf(stdout, _("usage: "), err, params);
va_end(params);
exit(129);
}
void show_usage_if_asked(int ac, const char **av, const char *err)
{
if (ac == 2 && !strcmp(av[1], "-h"))
show_usage_if_asked_helper(err);
}
void NORETURN die(const char *err, ...)
{
va_list params;