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:
parent
531c8dd4fb
commit
222b1212c1
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user