]> git.ipfire.org Git - thirdparty/git.git/commitdiff
use child_process member "args" instead of string array variable
authorRené Scharfe <l.s.r@web.de>
Sun, 30 Oct 2022 11:50:27 +0000 (12:50 +0100)
committerTaylor Blau <me@ttaylorr.com>
Sun, 30 Oct 2022 18:04:39 +0000 (14:04 -0400)
Use run_command() with a struct child_process variable and populate its
"args" member directly instead of building a string array and passing it
to run_command_v_opt().  This avoids the use of magic index numbers and
makes simplifies the possible addition of more arguments in the future.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
builtin/difftool.c
builtin/merge.c
builtin/remote.c
compat/mingw.c
ll-merge.c
t/helper/test-fake-ssh.c

index 4b10ad1a36908fe8067daa1e66a000c8c8e85718..22bcc3444b1c239eaf4deffb665850db6f69a933 100644 (file)
@@ -360,8 +360,8 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
        struct pair_entry *entry;
        struct index_state wtindex;
        struct checkout lstate, rstate;
-       int flags = RUN_GIT_CMD, err = 0;
-       const char *helper_argv[] = { "difftool--helper", NULL, NULL, NULL };
+       int err = 0;
+       struct child_process cmd = CHILD_PROCESS_INIT;
        struct hashmap wt_modified, tmp_modified;
        int indices_loaded = 0;
 
@@ -563,16 +563,17 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
        }
 
        strbuf_setlen(&ldir, ldir_len);
-       helper_argv[1] = ldir.buf;
        strbuf_setlen(&rdir, rdir_len);
-       helper_argv[2] = rdir.buf;
 
        if (extcmd) {
-               helper_argv[0] = extcmd;
-               flags = 0;
-       } else
+               strvec_push(&cmd.args, extcmd);
+       } else {
+               strvec_push(&cmd.args, "difftool--helper");
+               cmd.git_cmd = 1;
                setenv("GIT_DIFFTOOL_DIRDIFF", "true", 1);
-       ret = run_command_v_opt(helper_argv, flags);
+       }
+       strvec_pushl(&cmd.args, ldir.buf, rdir.buf, NULL);
+       ret = run_command(&cmd);
 
        /* TODO: audit for interaction with sparse-index. */
        ensure_full_index(&wtindex);
index 3bb49d805b4e57166118249248eaae95f5aaf535..34815771454d15338e7c88af625c8c8f769d521c 100644 (file)
@@ -347,33 +347,25 @@ out:
 
 static void read_empty(const struct object_id *oid)
 {
-       int i = 0;
-       const char *args[7];
-
-       args[i++] = "read-tree";
-       args[i++] = "-m";
-       args[i++] = "-u";
-       args[i++] = empty_tree_oid_hex();
-       args[i++] = oid_to_hex(oid);
-       args[i] = NULL;
+       struct child_process cmd = CHILD_PROCESS_INIT;
+
+       strvec_pushl(&cmd.args, "read-tree", "-m", "-u", empty_tree_oid_hex(),
+                    oid_to_hex(oid), NULL);
+       cmd.git_cmd = 1;
 
-       if (run_command_v_opt(args, RUN_GIT_CMD))
+       if (run_command(&cmd))
                die(_("read-tree failed"));
 }
 
 static void reset_hard(const struct object_id *oid)
 {
-       int i = 0;
-       const char *args[6];
-
-       args[i++] = "read-tree";
-       args[i++] = "-v";
-       args[i++] = "--reset";
-       args[i++] = "-u";
-       args[i++] = oid_to_hex(oid);
-       args[i] = NULL;
+       struct child_process cmd = CHILD_PROCESS_INIT;
+
+       strvec_pushl(&cmd.args, "read-tree", "-v", "--reset", "-u",
+                    oid_to_hex(oid), NULL);
+       cmd.git_cmd = 1;
 
-       if (run_command_v_opt(args, RUN_GIT_CMD))
+       if (run_command(&cmd))
                die(_("read-tree failed"));
 }
 
index 910f7b9316a4bdd036bd4203434c0bd6be0cd6cf..7cccd9fae2770423e16f0f622ea482855cf3cb68 100644 (file)
@@ -92,13 +92,15 @@ static int verbose;
 
 static int fetch_remote(const char *name)
 {
-       const char *argv[] = { "fetch", name, NULL, NULL };
-       if (verbose) {
-               argv[1] = "-v";
-               argv[2] = name;
-       }
+       struct child_process cmd = CHILD_PROCESS_INIT;
+
+       strvec_push(&cmd.args, "fetch");
+       if (verbose)
+               strvec_push(&cmd.args, "-v");
+       strvec_push(&cmd.args, name);
+       cmd.git_cmd = 1;
        printf_ln(_("Updating %s"), name);
-       if (run_command_v_opt(argv, RUN_GIT_CMD))
+       if (run_command(&cmd))
                return error(_("Could not fetch %s"), name);
        return 0;
 }
index 901375d58415a3ae21f03a15e7b78da6f8b08efa..d614f156df1db31248e3a1de51273ffefdd671ff 100644 (file)
@@ -196,16 +196,19 @@ static int read_yes_no_answer(void)
 static int ask_yes_no_if_possible(const char *format, ...)
 {
        char question[4096];
-       const char *retry_hook[] = { NULL, NULL, NULL };
+       const char *retry_hook;
        va_list args;
 
        va_start(args, format);
        vsnprintf(question, sizeof(question), format, args);
        va_end(args);
 
-       if ((retry_hook[0] = mingw_getenv("GIT_ASK_YESNO"))) {
-               retry_hook[1] = question;
-               return !run_command_v_opt(retry_hook, 0);
+       retry_hook = mingw_getenv("GIT_ASK_YESNO");
+       if (retry_hook) {
+               struct child_process cmd = CHILD_PROCESS_INIT;
+
+               strvec_pushl(&cmd.args, retry_hook, question, NULL);
+               return !run_command(&cmd);
        }
 
        if (!isatty(_fileno(stdin)) || !isatty(_fileno(stderr)))
index 8955d7e1f6eec73ef797781c2bd0d76d43d1ef19..d5f0c62bd828622584dfc3b75f5d45a89cf6ad20 100644 (file)
@@ -193,7 +193,7 @@ static enum ll_merge_result ll_ext_merge(const struct ll_merge_driver *fn,
        struct strbuf cmd = STRBUF_INIT;
        struct strbuf_expand_dict_entry dict[6];
        struct strbuf path_sq = STRBUF_INIT;
-       const char *args[] = { NULL, NULL };
+       struct child_process child = CHILD_PROCESS_INIT;
        int status, fd, i;
        struct stat st;
        enum ll_merge_result ret;
@@ -219,8 +219,9 @@ static enum ll_merge_result ll_ext_merge(const struct ll_merge_driver *fn,
 
        strbuf_expand(&cmd, fn->cmdline, strbuf_expand_dict_cb, &dict);
 
-       args[0] = cmd.buf;
-       status = run_command_v_opt(args, RUN_USING_SHELL);
+       child.use_shell = 1;
+       strvec_push(&child.args, cmd.buf);
+       status = run_command(&child);
        fd = open(temp[1], O_RDONLY);
        if (fd < 0)
                goto bad;
index 12beee99ad2f4e70e804b21895522d6d362929d2..2e576bcc11e9a62dc01206d46e01574ad47193d4 100644 (file)
@@ -8,7 +8,7 @@ int cmd_main(int argc, const char **argv)
        struct strbuf buf = STRBUF_INIT;
        FILE *f;
        int i;
-       const char *child_argv[] = { NULL, NULL };
+       struct child_process cmd = CHILD_PROCESS_INIT;
 
        /* First, print all parameters into $TRASH_DIRECTORY/ssh-output */
        if (!trash_directory)
@@ -25,6 +25,7 @@ int cmd_main(int argc, const char **argv)
        /* Now, evaluate the *last* parameter */
        if (argc < 2)
                return 0;
-       child_argv[0] = argv[argc - 1];
-       return run_command_v_opt(child_argv, RUN_USING_SHELL);
+       cmd.use_shell = 1;
+       strvec_push(&cmd.args, argv[argc - 1]);
+       return run_command(&cmd);
 }