Re: [PATCH 3/8] use child_process members "args" and "env" directly
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Oct 27, 2022, 22:37 UTC
- Message-ID
- <221028.86r0ysao1c.gmgdl@evledraar.gmail.com>
- In-Reply-To
- <672e4176-81b4-bb9c-5a14-e558d24b0c0d@web.de>
On Thu, Oct 27 2022, René Scharfe wrote:
Show 5 quoted lines
> Build argument list and environment of child processes by using > struct child_process and populating its members "args" and "env" > directly instead of maintaining separate strvecs and letting > run_command_v_opt() and friends populate these members. This is > simpler, shorter and slightly more efficient.
General comment: Here you make 2x of the flags in in run-command.h orphans, we could just remove them here atomically. I.e. squash in part of 8/8.
Show 33 quoted lines
> static int similarity_index(struct diff_filepair *p)
> diff --git a/git.c b/git.c
> index ee7758dcb0..6662548986 100644
> --- a/git.c
> +++ b/git.c
> @@ -787,7 +787,7 @@ static int run_argv(int *argcp, const char ***argv)
> if (!done_alias)
> handle_builtin(*argcp, *argv);
> else if (get_builtin(**argv)) {
> - struct strvec args = STRVEC_INIT;
> + struct child_process cmd = CHILD_PROCESS_INIT;
> int i;
>
> /*
> @@ -804,18 +804,21 @@ static int run_argv(int *argcp, const char ***argv)
>
> commit_pager_choice();
>
> - strvec_push(&args, "git");
> + strvec_push(&cmd.args, "git");
> for (i = 0; i < *argcp; i++)
> - strvec_push(&args, (*argv)[i]);
> + strvec_push(&cmd.args, (*argv)[i]);
>
> - trace_argv_printf(args.v, "trace: exec:");
> + trace_argv_printf(cmd.args.v, "trace: exec:");
>
> /*
> * if we fail because the command is not found, it is
> * OK to return. Otherwise, we just pass along the status code.
> */
> - i = run_command_v_opt_tr2(args.v, RUN_SILENT_EXEC_FAILURE |
> - RUN_CLEAN_ON_EXIT | RUN_WAIT_AFTER_CLEAN, "git_alias");^^ here, I didn't look carefully at the rest of the commits, but maybe there's similar squashes elsewhere...