diff options
Diffstat (limited to 'remote-curl.c')
-rw-r--r-- | remote-curl.c | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/remote-curl.c b/remote-curl.c index 53c8a3d1a3..b5ebe01800 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -8,6 +8,7 @@ #include "pkt-line.h" #include "string-list.h" #include "sideband.h" +#include "argv-array.h" static struct remote *remote; static const char *url; /* always ends with a trailing slash */ @@ -16,6 +17,7 @@ struct options { int verbosity; unsigned long depth; unsigned progress : 1, + check_self_contained_and_connected : 1, followtags : 1, dry_run : 1, thin : 1; @@ -68,6 +70,15 @@ static int set_option(const char *name, const char *value) return -1; return 0; } + else if (!strcmp(name, "check-connectivity")) { + if (!strcmp(value, "true")) + options.check_self_contained_and_connected = 1; + else if (!strcmp(value, "false")) + options.check_self_contained_and_connected = 0; + else + return -1; + return 0; + } else if (!strcmp(name, "cas")) { struct strbuf val = STRBUF_INIT; strbuf_addf(&val, "--" CAS_OPT_NAME "=%s", value); @@ -662,7 +673,7 @@ static int fetch_git(struct discovery *heads, struct strbuf preamble = STRBUF_INIT; char *depth_arg = NULL; int argc = 0, i, err; - const char *argv[15]; + const char *argv[16]; argv[argc++] = "fetch-pack"; argv[argc++] = "--stateless-rpc"; @@ -676,6 +687,8 @@ static int fetch_git(struct discovery *heads, argv[argc++] = "-v"; argv[argc++] = "-v"; } + if (options.check_self_contained_and_connected) + argv[argc++] = "--check-self-contained-and-connected"; if (!options.progress) argv[argc++] = "--no-progress"; if (options.depth) { @@ -796,41 +809,38 @@ static int push_dav(int nr_spec, char **specs) static int push_git(struct discovery *heads, int nr_spec, char **specs) { struct rpc_state rpc; - const char **argv; - int argc = 0, i, err; + int i, err; + struct argv_array args; struct string_list_item *cas_option; - argv = xmalloc((10 + nr_spec + cas_options.nr) * sizeof(char *)); - argv[argc++] = "send-pack"; - argv[argc++] = "--stateless-rpc"; - argv[argc++] = "--helper-status"; + argv_array_init(&args); + argv_array_pushl(&args, "send-pack", "--stateless-rpc", "--helper-status", + NULL); + if (options.thin) - argv[argc++] = "--thin"; + argv_array_push(&args, "--thin"); if (options.dry_run) - argv[argc++] = "--dry-run"; + argv_array_push(&args, "--dry-run"); if (options.verbosity == 0) - argv[argc++] = "--quiet"; + argv_array_push(&args, "--quiet"); else if (options.verbosity > 1) - argv[argc++] = "--verbose"; - argv[argc++] = options.progress ? "--progress" : "--no-progress"; - + argv_array_push(&args, "--verbose"); + argv_array_push(&args, options.progress ? "--progress" : "--no-progress"); for_each_string_list_item(cas_option, &cas_options) - argv[argc++] = cas_option->string; - - argv[argc++] = url; + argv_array_push(&args, cas_option->string); + argv_array_push(&args, url); for (i = 0; i < nr_spec; i++) - argv[argc++] = specs[i]; - argv[argc++] = NULL; + argv_array_push(&args, specs[i]); memset(&rpc, 0, sizeof(rpc)); rpc.service_name = "git-receive-pack", - rpc.argv = argv; + rpc.argv = args.argv; err = rpc_service(&rpc, heads); if (rpc.result.len) write_or_die(1, rpc.result.buf, rpc.result.len); strbuf_release(&rpc.result); - free(argv); + argv_array_clear(&args); return err; } @@ -953,6 +963,7 @@ int main(int argc, const char **argv) printf("fetch\n"); printf("option\n"); printf("push\n"); + printf("check-connectivity\n"); printf("\n"); fflush(stdout); } else { |