зеркало из https://github.com/microsoft/git.git
fetch-pack: use argv_array for index-pack / unpack-objects
This cleans up a magic number that must be kept in sync with the rest of the code (the number of argv slots). It also lets us drop some fixed buffers and an sprintf (since we can now use argv_array_pushf). We do still have to keep one fixed buffer for calling gethostname, but at least now the size computations for it are much simpler. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
43bb66ae0b
Коммит
984a43b902
56
fetch-pack.c
56
fetch-pack.c
|
@ -681,11 +681,10 @@ static int get_pack(struct fetch_pack_args *args,
|
|||
int xd[2], char **pack_lockfile)
|
||||
{
|
||||
struct async demux;
|
||||
const char *argv[22];
|
||||
char keep_arg[256];
|
||||
char hdr_arg[256];
|
||||
const char **av, *cmd_name;
|
||||
int do_keep = args->keep_pack;
|
||||
const char *cmd_name;
|
||||
struct pack_header header;
|
||||
int pass_header = 0;
|
||||
struct child_process cmd = CHILD_PROCESS_INIT;
|
||||
int ret;
|
||||
|
||||
|
@ -705,17 +704,11 @@ static int get_pack(struct fetch_pack_args *args,
|
|||
else
|
||||
demux.out = xd[0];
|
||||
|
||||
cmd.argv = argv;
|
||||
av = argv;
|
||||
*hdr_arg = 0;
|
||||
if (!args->keep_pack && unpack_limit) {
|
||||
struct pack_header header;
|
||||
|
||||
if (read_pack_header(demux.out, &header))
|
||||
die("protocol error: bad pack header");
|
||||
snprintf(hdr_arg, sizeof(hdr_arg),
|
||||
"--pack_header=%"PRIu32",%"PRIu32,
|
||||
ntohl(header.hdr_version), ntohl(header.hdr_entries));
|
||||
pass_header = 1;
|
||||
if (ntohl(header.hdr_entries) < unpack_limit)
|
||||
do_keep = 0;
|
||||
else
|
||||
|
@ -723,44 +716,49 @@ static int get_pack(struct fetch_pack_args *args,
|
|||
}
|
||||
|
||||
if (alternate_shallow_file) {
|
||||
*av++ = "--shallow-file";
|
||||
*av++ = alternate_shallow_file;
|
||||
argv_array_push(&cmd.args, "--shallow-file");
|
||||
argv_array_push(&cmd.args, alternate_shallow_file);
|
||||
}
|
||||
|
||||
if (do_keep) {
|
||||
if (pack_lockfile)
|
||||
cmd.out = -1;
|
||||
*av++ = cmd_name = "index-pack";
|
||||
*av++ = "--stdin";
|
||||
cmd_name = "index-pack";
|
||||
argv_array_push(&cmd.args, cmd_name);
|
||||
argv_array_push(&cmd.args, "--stdin");
|
||||
if (!args->quiet && !args->no_progress)
|
||||
*av++ = "-v";
|
||||
argv_array_push(&cmd.args, "-v");
|
||||
if (args->use_thin_pack)
|
||||
*av++ = "--fix-thin";
|
||||
argv_array_push(&cmd.args, "--fix-thin");
|
||||
if (args->lock_pack || unpack_limit) {
|
||||
int s = sprintf(keep_arg,
|
||||
"--keep=fetch-pack %"PRIuMAX " on ", (uintmax_t) getpid());
|
||||
if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
|
||||
strcpy(keep_arg + s, "localhost");
|
||||
*av++ = keep_arg;
|
||||
char hostname[256];
|
||||
if (gethostname(hostname, sizeof(hostname)))
|
||||
xsnprintf(hostname, sizeof(hostname), "localhost");
|
||||
argv_array_pushf(&cmd.args,
|
||||
"--keep=fetch-pack %"PRIuMAX " on %s",
|
||||
(uintmax_t)getpid(), hostname);
|
||||
}
|
||||
if (args->check_self_contained_and_connected)
|
||||
*av++ = "--check-self-contained-and-connected";
|
||||
argv_array_push(&cmd.args, "--check-self-contained-and-connected");
|
||||
}
|
||||
else {
|
||||
*av++ = cmd_name = "unpack-objects";
|
||||
cmd_name = "unpack-objects";
|
||||
argv_array_push(&cmd.args, cmd_name);
|
||||
if (args->quiet || args->no_progress)
|
||||
*av++ = "-q";
|
||||
argv_array_push(&cmd.args, "-q");
|
||||
args->check_self_contained_and_connected = 0;
|
||||
}
|
||||
if (*hdr_arg)
|
||||
*av++ = hdr_arg;
|
||||
|
||||
if (pass_header)
|
||||
argv_array_pushf(&cmd.args, "--pack_header=%"PRIu32",%"PRIu32,
|
||||
ntohl(header.hdr_version),
|
||||
ntohl(header.hdr_entries));
|
||||
if (fetch_fsck_objects >= 0
|
||||
? fetch_fsck_objects
|
||||
: transfer_fsck_objects >= 0
|
||||
? transfer_fsck_objects
|
||||
: 0)
|
||||
*av++ = "--strict";
|
||||
*av++ = NULL;
|
||||
argv_array_push(&cmd.args, "--strict");
|
||||
|
||||
cmd.in = demux.out;
|
||||
cmd.git_cmd = 1;
|
||||
|
|
Загрузка…
Ссылка в новой задаче