mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Merge branch 'jk/send-pack-many-refspecs'
The number of refs that can be pushed at once over smart HTTP was limited by the command line length. The limitation has been lifted by passing these refs from the standard input of send-pack. * jk/send-pack-many-refspecs: send-pack: take refspecs over stdin
This commit is contained in:
@@ -862,6 +862,7 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs)
|
||||
int i, err;
|
||||
struct argv_array args;
|
||||
struct string_list_item *cas_option;
|
||||
struct strbuf preamble = STRBUF_INIT;
|
||||
|
||||
argv_array_init(&args);
|
||||
argv_array_pushl(&args, "send-pack", "--stateless-rpc", "--helper-status",
|
||||
@@ -879,17 +880,22 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs)
|
||||
for_each_string_list_item(cas_option, &cas_options)
|
||||
argv_array_push(&args, cas_option->string);
|
||||
argv_array_push(&args, url.buf);
|
||||
|
||||
argv_array_push(&args, "--stdin");
|
||||
for (i = 0; i < nr_spec; i++)
|
||||
argv_array_push(&args, specs[i]);
|
||||
packet_buf_write(&preamble, "%s\n", specs[i]);
|
||||
packet_buf_flush(&preamble);
|
||||
|
||||
memset(&rpc, 0, sizeof(rpc));
|
||||
rpc.service_name = "git-receive-pack",
|
||||
rpc.argv = args.argv;
|
||||
rpc.stdin_preamble = &preamble;
|
||||
|
||||
err = rpc_service(&rpc, heads);
|
||||
if (rpc.result.len)
|
||||
write_or_die(1, rpc.result.buf, rpc.result.len);
|
||||
strbuf_release(&rpc.result);
|
||||
strbuf_release(&preamble);
|
||||
argv_array_clear(&args);
|
||||
return err;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user