remote-http: use argv-array

Instead of using a hand-managed argument array, use argv-array API
to manage dynamically formulated command line.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2013-07-08 22:16:31 -07:00
parent 531c8dd4fb
commit 222b1212c1

View File

@ -7,6 +7,7 @@
#include "run-command.h" #include "run-command.h"
#include "pkt-line.h" #include "pkt-line.h"
#include "sideband.h" #include "sideband.h"
#include "argv-array.h"
static struct remote *remote; static struct remote *remote;
static const char *url; /* always ends with a trailing slash */ static const char *url; /* always ends with a trailing slash */
@ -787,36 +788,35 @@ static int push_dav(int nr_spec, char **specs)
static int push_git(struct discovery *heads, int nr_spec, char **specs) static int push_git(struct discovery *heads, int nr_spec, char **specs)
{ {
struct rpc_state rpc; struct rpc_state rpc;
const char **argv; int i, err;
int argc = 0, i, err; struct argv_array args;
argv_array_init(&args);
argv_array_pushl(&args, "send-pack", "--stateless-rpc", "--helper-status",
NULL);
argv = xmalloc((10 + nr_spec) * sizeof(char*));
argv[argc++] = "send-pack";
argv[argc++] = "--stateless-rpc";
argv[argc++] = "--helper-status";
if (options.thin) if (options.thin)
argv[argc++] = "--thin"; argv_array_push(&args, "--thin");
if (options.dry_run) if (options.dry_run)
argv[argc++] = "--dry-run"; argv_array_push(&args, "--dry-run");
if (options.verbosity == 0) if (options.verbosity == 0)
argv[argc++] = "--quiet"; argv_array_push(&args, "--quiet");
else if (options.verbosity > 1) else if (options.verbosity > 1)
argv[argc++] = "--verbose"; argv_array_push(&args, "--verbose");
argv[argc++] = options.progress ? "--progress" : "--no-progress"; argv_array_push(&args, options.progress ? "--progress" : "--no-progress");
argv[argc++] = url; argv_array_push(&args, url);
for (i = 0; i < nr_spec; i++) for (i = 0; i < nr_spec; i++)
argv[argc++] = specs[i]; argv_array_push(&args, specs[i]);
argv[argc++] = NULL;
memset(&rpc, 0, sizeof(rpc)); memset(&rpc, 0, sizeof(rpc));
rpc.service_name = "git-receive-pack", rpc.service_name = "git-receive-pack",
rpc.argv = argv; rpc.argv = args.argv;
err = rpc_service(&rpc, heads); err = rpc_service(&rpc, heads);
if (rpc.result.len) if (rpc.result.len)
write_or_die(1, rpc.result.buf, rpc.result.len); write_or_die(1, rpc.result.buf, rpc.result.len);
strbuf_release(&rpc.result); strbuf_release(&rpc.result);
free(argv); argv_array_clear(&args);
return err; return err;
} }