run_command: teach API users to use embedded 'args' more

The child_process structure has an embedded strvec for formulating
the command line argument list these days, but code that predates
the wide use of it prepared a separate char *argv[] array and
manually set the child_process.argv pointer point at it.

Teach these old-style code to lose the separate argv[] array.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Junio C Hamano 2020-08-26 15:25:03 -07:00
parent 47ae905ffb
commit afbdba391e
4 changed files with 7 additions and 19 deletions

View File

@ -638,7 +638,6 @@ static int filter_buffer_or_fd(int in, int out, void *data)
struct child_process child_process = CHILD_PROCESS_INIT; struct child_process child_process = CHILD_PROCESS_INIT;
struct filter_params *params = (struct filter_params *)data; struct filter_params *params = (struct filter_params *)data;
int write_err, status; int write_err, status;
const char *argv[] = { NULL, NULL };


/* apply % substitution to cmd */ /* apply % substitution to cmd */
struct strbuf cmd = STRBUF_INIT; struct strbuf cmd = STRBUF_INIT;
@ -656,9 +655,7 @@ static int filter_buffer_or_fd(int in, int out, void *data)
strbuf_expand(&cmd, params->cmd, strbuf_expand_dict_cb, &dict); strbuf_expand(&cmd, params->cmd, strbuf_expand_dict_cb, &dict);
strbuf_release(&path); strbuf_release(&path);


argv[0] = cmd.buf; strvec_push(&child_process.args, cmd.buf);

child_process.argv = argv;
child_process.use_shell = 1; child_process.use_shell = 1;
child_process.in = -1; child_process.in = -1;
child_process.out = out; child_process.out = out;

View File

@ -274,11 +274,9 @@ static int run_credential_helper(struct credential *c,
int want_output) int want_output)
{ {
struct child_process helper = CHILD_PROCESS_INIT; struct child_process helper = CHILD_PROCESS_INIT;
const char *argv[] = { NULL, NULL };
FILE *fp; FILE *fp;


argv[0] = cmd; strvec_push(&helper.args, cmd);
helper.argv = argv;
helper.use_shell = 1; helper.use_shell = 1;
helper.in = -1; helper.in = -1;
if (want_output) if (want_output)

View File

@ -1726,14 +1726,6 @@ unsigned is_submodule_modified(const char *path, int ignore_untracked)
int submodule_uses_gitfile(const char *path) int submodule_uses_gitfile(const char *path)
{ {
struct child_process cp = CHILD_PROCESS_INIT; struct child_process cp = CHILD_PROCESS_INIT;
const char *argv[] = {
"submodule",
"foreach",
"--quiet",
"--recursive",
"test -f .git",
NULL,
};
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
const char *git_dir; const char *git_dir;


@ -1746,7 +1738,10 @@ int submodule_uses_gitfile(const char *path)
strbuf_release(&buf); strbuf_release(&buf);


/* Now test that all nested submodules use a gitfile too */ /* Now test that all nested submodules use a gitfile too */
cp.argv = argv; strvec_pushl(&cp.args,
"submodule", "foreach", "--quiet", "--recursive",
"test -f .git", NULL);

prepare_submodule_repo_env(&cp.env_array); prepare_submodule_repo_env(&cp.env_array);
cp.git_cmd = 1; cp.git_cmd = 1;
cp.no_stdin = 1; cp.no_stdin = 1;

View File

@ -221,15 +221,13 @@ static char *apply_command(const char *command, const char *arg)
struct strbuf cmd = STRBUF_INIT; struct strbuf cmd = STRBUF_INIT;
struct strbuf buf = STRBUF_INIT; struct strbuf buf = STRBUF_INIT;
struct child_process cp = CHILD_PROCESS_INIT; struct child_process cp = CHILD_PROCESS_INIT;
const char *argv[] = {NULL, NULL};
char *result; char *result;


strbuf_addstr(&cmd, command); strbuf_addstr(&cmd, command);
if (arg) if (arg)
strbuf_replace(&cmd, TRAILER_ARG_STRING, arg); strbuf_replace(&cmd, TRAILER_ARG_STRING, arg);


argv[0] = cmd.buf; strvec_push(&cp.args, cmd.buf);
cp.argv = argv;
cp.env = local_repo_env; cp.env = local_repo_env;
cp.no_stdin = 1; cp.no_stdin = 1;
cp.use_shell = 1; cp.use_shell = 1;