]> git.ipfire.org Git - thirdparty/git.git/commitdiff
run-command API users: use strvec_push(), not argv construction
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Thu, 25 Nov 2021 22:52:21 +0000 (23:52 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 26 Nov 2021 06:15:07 +0000 (22:15 -0800)
Change a pattern of hardcoding an "argv" array size, populating it and
assigning to the "argv" member of "struct child_process" to instead
use "strvec_push()" to add data to the "args" member.

As noted in the preceding commit this moves us further towards being
able to remove the "argv" member in a subsequent commit

These callers could have used strvec_pushl(), but moving to
strvec_push() makes the diff easier to read, and keeps the arguments
aligned as before.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
archive-tar.c
builtin/receive-pack.c
daemon.c
diff.c
prompt.c
transport.c

index 05d2455870d7fa95f2575a35a81c3cbe7363e625..3c74db174687d7c95abf2ef8f042ef2e49146b4e 100644 (file)
@@ -430,7 +430,6 @@ static int write_tar_filter_archive(const struct archiver *ar,
 {
        struct strbuf cmd = STRBUF_INIT;
        struct child_process filter = CHILD_PROCESS_INIT;
-       const char *argv[2];
        int r;
 
        if (!ar->data)
@@ -440,14 +439,12 @@ static int write_tar_filter_archive(const struct archiver *ar,
        if (args->compression_level >= 0)
                strbuf_addf(&cmd, " -%d", args->compression_level);
 
-       argv[0] = cmd.buf;
-       argv[1] = NULL;
-       filter.argv = argv;
+       strvec_push(&filter.args, cmd.buf);
        filter.use_shell = 1;
        filter.in = -1;
 
        if (start_command(&filter) < 0)
-               die_errno(_("unable to start '%s' filter"), argv[0]);
+               die_errno(_("unable to start '%s' filter"), cmd.buf);
        close(1);
        if (dup2(filter.in, 1) < 0)
                die_errno(_("unable to redirect descriptor"));
@@ -457,7 +454,7 @@ static int write_tar_filter_archive(const struct archiver *ar,
 
        close(1);
        if (finish_command(&filter) != 0)
-               die(_("'%s' filter reported error"), argv[0]);
+               die(_("'%s' filter reported error"), cmd.buf);
 
        strbuf_release(&cmd);
        return r;
index 6149d50796584e1b7d33fe6023fd5e86297f3d7c..48c99c8ee4561e85bf03818db707fbeeef3ee3d4 100644 (file)
@@ -812,16 +812,13 @@ static int run_and_feed_hook(const char *hook_name, feed_fn feed,
 {
        struct child_process proc = CHILD_PROCESS_INIT;
        struct async muxer;
-       const char *argv[2];
        int code;
+       const char *hook_path = find_hook(hook_name);
 
-       argv[0] = find_hook(hook_name);
-       if (!argv[0])
+       if (!hook_path)
                return 0;
 
-       argv[1] = NULL;
-
-       proc.argv = argv;
+       strvec_push(&proc.args, hook_path);
        proc.in = -1;
        proc.stdout_to_stderr = 1;
        proc.trace2_hook_name = hook_name;
@@ -943,23 +940,21 @@ static int run_receive_hook(struct command *commands,
 
 static int run_update_hook(struct command *cmd)
 {
-       const char *argv[5];
        struct child_process proc = CHILD_PROCESS_INIT;
        int code;
+       const char *hook_path = find_hook("update");
 
-       argv[0] = find_hook("update");
-       if (!argv[0])
+       if (!hook_path)
                return 0;
 
-       argv[1] = cmd->ref_name;
-       argv[2] = oid_to_hex(&cmd->old_oid);
-       argv[3] = oid_to_hex(&cmd->new_oid);
-       argv[4] = NULL;
+       strvec_push(&proc.args, hook_path);
+       strvec_push(&proc.args, cmd->ref_name);
+       strvec_push(&proc.args, oid_to_hex(&cmd->old_oid));
+       strvec_push(&proc.args, oid_to_hex(&cmd->new_oid));
 
        proc.no_stdin = 1;
        proc.stdout_to_stderr = 1;
        proc.err = use_sideband ? -1 : 0;
-       proc.argv = argv;
        proc.trace2_hook_name = "update";
 
        code = start_command(&proc);
@@ -1117,22 +1112,20 @@ static int run_proc_receive_hook(struct command *commands,
        struct child_process proc = CHILD_PROCESS_INIT;
        struct async muxer;
        struct command *cmd;
-       const char *argv[2];
        struct packet_reader reader;
        struct strbuf cap = STRBUF_INIT;
        struct strbuf errmsg = STRBUF_INIT;
        int hook_use_push_options = 0;
        int version = 0;
        int code;
+       const char *hook_path = find_hook("proc-receive");
 
-       argv[0] = find_hook("proc-receive");
-       if (!argv[0]) {
+       if (!hook_path) {
                rp_error("cannot find hook 'proc-receive'");
                return -1;
        }
-       argv[1] = NULL;
 
-       proc.argv = argv;
+       strvec_push(&proc.args, hook_path);
        proc.in = -1;
        proc.out = -1;
        proc.trace2_hook_name = "proc-receive";
index 8df21f2130ccfcbd1247a1c6f182ec858e8e8337..4a000ee4afa40387351936ea2ed583bda38668f9 100644 (file)
--- a/daemon.c
+++ b/daemon.c
@@ -326,22 +326,18 @@ static int run_access_hook(struct daemon_service *service, const char *dir,
 {
        struct child_process child = CHILD_PROCESS_INIT;
        struct strbuf buf = STRBUF_INIT;
-       const char *argv[8];
-       const char **arg = argv;
        char *eol;
        int seen_errors = 0;
 
-       *arg++ = access_hook;
-       *arg++ = service->name;
-       *arg++ = path;
-       *arg++ = hi->hostname.buf;
-       *arg++ = get_canon_hostname(hi);
-       *arg++ = get_ip_address(hi);
-       *arg++ = hi->tcp_port.buf;
-       *arg = NULL;
+       strvec_push(&child.args, access_hook);
+       strvec_push(&child.args, service->name);
+       strvec_push(&child.args, path);
+       strvec_push(&child.args, hi->hostname.buf);
+       strvec_push(&child.args, get_canon_hostname(hi));
+       strvec_push(&child.args, get_ip_address(hi));
+       strvec_push(&child.args, hi->tcp_port.buf);
 
        child.use_shell = 1;
-       child.argv = argv;
        child.no_stdin = 1;
        child.no_stderr = 1;
        child.out = -1;
diff --git a/diff.c b/diff.c
index 861282db1c3283ad5cd6234237408bb5cf223d2b..410768574280f1179c78724ae13387f351cbf4cd 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -6921,19 +6921,15 @@ static char *run_textconv(struct repository *r,
                          size_t *outsize)
 {
        struct diff_tempfile *temp;
-       const char *argv[3];
-       const char **arg = argv;
        struct child_process child = CHILD_PROCESS_INIT;
        struct strbuf buf = STRBUF_INIT;
        int err = 0;
 
        temp = prepare_temp_file(r, spec->path, spec);
-       *arg++ = pgm;
-       *arg++ = temp->name;
-       *arg = NULL;
+       strvec_push(&child.args, pgm);
+       strvec_push(&child.args, temp->name);
 
        child.use_shell = 1;
-       child.argv = argv;
        child.out = -1;
        if (start_command(&child)) {
                remove_tempfile();
index 5ded21a017f1089c5a5f63c998c3b11631c0a5d6..50df17279d1d5b2615fb8dd5a13853a2ea87b8eb 100644 (file)
--- a/prompt.c
+++ b/prompt.c
@@ -8,15 +8,12 @@
 static char *do_askpass(const char *cmd, const char *prompt)
 {
        struct child_process pass = CHILD_PROCESS_INIT;
-       const char *args[3];
        static struct strbuf buffer = STRBUF_INIT;
        int err = 0;
 
-       args[0] = cmd;
-       args[1] = prompt;
-       args[2] = NULL;
+       strvec_push(&pass.args, cmd);
+       strvec_push(&pass.args, prompt);
 
-       pass.argv = args;
        pass.out = -1;
 
        if (start_command(&pass))
index e4f1decae2063ce8981344c19626141c8bcd866c..92ab9a3fa6b2d397c292c9e1605d1de56ec8940c 100644 (file)
@@ -1204,16 +1204,15 @@ static int run_pre_push_hook(struct transport *transport,
        struct ref *r;
        struct child_process proc = CHILD_PROCESS_INIT;
        struct strbuf buf;
-       const char *argv[4];
+       const char *hook_path = find_hook("pre-push");
 
-       if (!(argv[0] = find_hook("pre-push")))
+       if (!hook_path)
                return 0;
 
-       argv[1] = transport->remote->name;
-       argv[2] = transport->url;
-       argv[3] = NULL;
+       strvec_push(&proc.args, hook_path);
+       strvec_push(&proc.args, transport->remote->name);
+       strvec_push(&proc.args, transport->url);
 
-       proc.argv = argv;
        proc.in = -1;
        proc.trace2_hook_name = "pre-push";