Git fork

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>

+26 -3
+2
git-compat-util.h
··· 701 701 void warning(const char *err, ...) __attribute__((format (printf, 1, 2))); 702 702 void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2))); 703 703 704 + void show_usage_if_asked(int ac, const char **av, const char *err); 705 + 704 706 #ifndef NO_OPENSSL 705 707 #ifdef APPLE_COMMON_CRYPTO 706 708 #include "compat/apple-common-crypto.h"
+24 -3
usage.c
··· 8 8 #include "gettext.h" 9 9 #include "trace2.h" 10 10 11 - static void vreportf(const char *prefix, const char *err, va_list params) 11 + static void vfreportf(FILE *f, const char *prefix, const char *err, va_list params) 12 12 { 13 13 char msg[4096]; 14 14 char *p, *pend = msg + sizeof(msg); ··· 32 32 } 33 33 34 34 *(p++) = '\n'; /* we no longer need a NUL */ 35 - fflush(stderr); 36 - write_in_full(2, msg, p - msg); 35 + fflush(f); 36 + write_in_full(fileno(f), msg, p - msg); 37 + } 38 + 39 + static void vreportf(const char *prefix, const char *err, va_list params) 40 + { 41 + vfreportf(stderr, prefix, err, params); 37 42 } 38 43 39 44 static NORETURN void usage_builtin(const char *err, va_list params) ··· 171 176 void NORETURN usage(const char *err) 172 177 { 173 178 usagef("%s", err); 179 + } 180 + 181 + static void show_usage_if_asked_helper(const char *err, ...) 182 + { 183 + va_list params; 184 + 185 + va_start(params, err); 186 + vfreportf(stdout, _("usage: "), err, params); 187 + va_end(params); 188 + exit(129); 189 + } 190 + 191 + void show_usage_if_asked(int ac, const char **av, const char *err) 192 + { 193 + if (ac == 2 && !strcmp(av[1], "-h")) 194 + show_usage_if_asked_helper(err); 174 195 } 175 196 176 197 void NORETURN die(const char *err, ...)