|
7 | 7 | #include "run-command.h" |
8 | 8 | #include "pkt-line.h" |
9 | 9 | #include "sideband.h" |
| 10 | +#include "argv-array.h" |
10 | 11 |
|
11 | 12 | static struct remote *remote; |
12 | 13 | static const char *url; /* always ends with a trailing slash */ |
@@ -787,36 +788,35 @@ static int push_dav(int nr_spec, char **specs) |
787 | 788 | static int push_git(struct discovery *heads, int nr_spec, char **specs) |
788 | 789 | { |
789 | 790 | struct rpc_state rpc; |
790 | | - const char **argv; |
791 | | - int argc = 0, i, err; |
| 791 | + int i, err; |
| 792 | + struct argv_array args; |
| 793 | + |
| 794 | + argv_array_init(&args); |
| 795 | + argv_array_pushl(&args, "send-pack", "--stateless-rpc", "--helper-status", |
| 796 | + NULL); |
792 | 797 |
|
793 | | - argv = xmalloc((10 + nr_spec) * sizeof(char*)); |
794 | | - argv[argc++] = "send-pack"; |
795 | | - argv[argc++] = "--stateless-rpc"; |
796 | | - argv[argc++] = "--helper-status"; |
797 | 798 | if (options.thin) |
798 | | - argv[argc++] = "--thin"; |
| 799 | + argv_array_push(&args, "--thin"); |
799 | 800 | if (options.dry_run) |
800 | | - argv[argc++] = "--dry-run"; |
| 801 | + argv_array_push(&args, "--dry-run"); |
801 | 802 | if (options.verbosity == 0) |
802 | | - argv[argc++] = "--quiet"; |
| 803 | + argv_array_push(&args, "--quiet"); |
803 | 804 | else if (options.verbosity > 1) |
804 | | - argv[argc++] = "--verbose"; |
805 | | - argv[argc++] = options.progress ? "--progress" : "--no-progress"; |
806 | | - argv[argc++] = url; |
| 805 | + argv_array_push(&args, "--verbose"); |
| 806 | + argv_array_push(&args, options.progress ? "--progress" : "--no-progress"); |
| 807 | + argv_array_push(&args, url); |
807 | 808 | for (i = 0; i < nr_spec; i++) |
808 | | - argv[argc++] = specs[i]; |
809 | | - argv[argc++] = NULL; |
| 809 | + argv_array_push(&args, specs[i]); |
810 | 810 |
|
811 | 811 | memset(&rpc, 0, sizeof(rpc)); |
812 | 812 | rpc.service_name = "git-receive-pack", |
813 | | - rpc.argv = argv; |
| 813 | + rpc.argv = args.argv; |
814 | 814 |
|
815 | 815 | err = rpc_service(&rpc, heads); |
816 | 816 | if (rpc.result.len) |
817 | 817 | write_or_die(1, rpc.result.buf, rpc.result.len); |
818 | 818 | strbuf_release(&rpc.result); |
819 | | - free(argv); |
| 819 | + argv_array_clear(&args); |
820 | 820 | return err; |
821 | 821 | } |
822 | 822 |
|
|
0 commit comments