> If a user of the run_processes_parallel() API wants to pipe a large > amount of information to stdin of each parallel command, that > information could exceed the buffer of the pipe allocated for that > process's stdin. Generally this is solved by repeatedly writing to > child_process.in between calls to start_command() and finish_command(); > run_processes_parallel() did not provide users an opportunity to access > child_process at that time. [snip] > diff --git a/run-command.h b/run-command.h > index 6472b38bde..e058c0e2c8 100644 > --- a/run-command.h > +++ b/run-command.h > @@ -436,6 +436,20 @@ typedef int (*start_failure_fn)(struct strbuf *out, > void *pp_cb, > void *pp_task_cb); > > +/** > + * This callback is called repeatedly on every child process who requests > + * start_command() to create a pipe by setting child_process.in < 0. > + * > + * pp_cb is the callback cookie as passed into run_processes_parallel, and > + * pp_task_cb is the callback cookie as passed into get_next_task_fn. > + * The contents of 'send' will be read into the pipe and passed to the pipe. > + * > + * Return nonzero to close the pipe. > + */ > +typedef int (*feed_pipe_fn)(struct strbuf *pipe, > + void *pp_cb, > + void *pp_task_cb); > + As you mention above in the commit message, I think the clearest API to support what we need is to just have a callback (that has access to child_process) that is executed between process start and finish. As it is, I think this callback is too specific in that it takes a struct strbuf. I think that this struct strbuf will just end up being unnecessary copying much of the time, when the user could have just written to the fd directly.