
Using the show_usage_and_exit_if_asked() helper we introduced earlier, fix callers of usage() that want to show the help text when explicitly asked by the end-user. The help text now goes to the standard output stream for them. These are the bog standard "if we got only '-h', then that is a request for help" callers. Their if (argc == 2 && !strcmp(argv[1], "-h")) usage(message); are simply replaced with show_usage_and_exit_if_asked(argc, argv, message); With this, the built-ins tested by t0012 all send their help text to their standard output stream, so the check in t0012 that was half tightened earlier is now fully tightened to insist on standard error stream being empty. Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
/*
|
|
* Copyright (c) 2005, 2006 Rene Scharfe
|
|
*/
|
|
#include "builtin.h"
|
|
#include "commit.h"
|
|
#include "tar.h"
|
|
|
|
static const char builtin_get_tar_commit_id_usage[] =
|
|
"git get-tar-commit-id";
|
|
|
|
/* ustar header + extended global header content */
|
|
#define RECORDSIZE (512)
|
|
#define HEADERSIZE (2 * RECORDSIZE)
|
|
|
|
int cmd_get_tar_commit_id(int argc,
|
|
const char **argv,
|
|
const char *prefix,
|
|
struct repository *repo UNUSED)
|
|
{
|
|
char buffer[HEADERSIZE];
|
|
struct ustar_header *header = (struct ustar_header *)buffer;
|
|
char *content = buffer + RECORDSIZE;
|
|
const char *comment;
|
|
ssize_t n;
|
|
long len;
|
|
char *end;
|
|
|
|
BUG_ON_NON_EMPTY_PREFIX(prefix);
|
|
|
|
show_usage_if_asked(argc, argv, builtin_get_tar_commit_id_usage);
|
|
|
|
if (argc != 1)
|
|
usage(builtin_get_tar_commit_id_usage);
|
|
|
|
n = read_in_full(0, buffer, HEADERSIZE);
|
|
if (n < 0)
|
|
die_errno("git get-tar-commit-id: read error");
|
|
if (n != HEADERSIZE)
|
|
die_errno("git get-tar-commit-id: EOF before reading tar header");
|
|
if (header->typeflag[0] != TYPEFLAG_GLOBAL_HEADER)
|
|
return 1;
|
|
|
|
errno = 0;
|
|
len = strtol(content, &end, 10);
|
|
if (errno == ERANGE || end == content || len < 0)
|
|
return 1;
|
|
if (!skip_prefix(end, " comment=", &comment))
|
|
return 1;
|
|
len -= comment - content;
|
|
if (len < 1 || !(len % 2) ||
|
|
hash_algo_by_length((len - 1) / 2) == GIT_HASH_UNKNOWN)
|
|
return 1;
|
|
|
|
if (write_in_full(1, comment, len) < 0)
|
|
die_errno("git get-tar-commit-id: write error");
|
|
|
|
return 0;
|
|
}
|