Subject: Re: [PATCH 2/5] run-command: allow stdin for run_processes_parallel

From: Junio C Hamano <[email-masked]>
Date: Mon, 23 Jan 2023 14:52:09 -0800

Ævar Arnfjörð Bjarmason  <[email-masked]> writes:

> +	/*
> +	 * By default, do not inherit stdin from the parent process - otherwise,
> +	 * all children would share stdin! Users may overwrite this to provide
> +	 * something to the child's stdin by having their 'get_next_task'
> +	 * callback assign 0 to .no_stdin and an appropriate integer to .in.
> +	 */
> +	pp->children[i].process.no_stdin = 1;
> +
>  	code = opts->get_next_task(&pp->children[i].process,
>  				   opts->ungroup ? NULL : &pp->children[i].err,
>  				   opts->data,
> @@ -1601,7 +1609,6 @@ static int pp_start_one(struct parallel_processes *pp,
>  		pp->children[i].process.err = -1;
>  		pp->children[i].process.stdout_to_stderr = 1;
>  	}
> -	pp->children[i].process.no_stdin = 1;

For this single process, by default .no_stdin is set before it is
passed to start_command(), so the default behaviour does not change.

This needs a new safety to ensure that processes that have .no_stdin
turned off do not share the same value in their .in member, doesn't
it?  Hopefully that will be added in a later step in the series?

Provided that such a safety will appear in the end result, this
conversion does make sense to me.  Let's read on.

>  	if (start_command(&pp->children[i].process)) {
>  		if (opts->start_failure)