Stefan Beller wrote: > Instead of implementing line reading yet again, make use of our beautiful > library function to read one line. By using strbuf_getwholeline instead > of strbuf_read, we avoid having to allocate memory for the entire child > process output at once. That is, we limit maximum memory usage.
It also overlaps work a little better. > Once we know all information that we care about, we can terminate > the child early. In that case we do not care about its exit code as well. Should this say something about SIGPIPE? [...] > +++ b/submodule.c [...] > @@ -1072,28 +1072,27 @@ unsigned is_submodule_modified(const char *path, int > ignore_untracked) [...] > + /* > + * We're not interested in any further information from > + * the child any more, no output nor its exit code. > + */ language nit: s/, no output/: neither output/ [...] > - if (finish_command(&cp)) > + if (finish_command(&cp) && !ignore_cp_exit_code) finish_command complains if the child dies of SIGTERM: error: status died of signal 15 wait_or_whine(cp->pid, cp->argv[0], 1) doesn't do that but is meant for signal handling. Maybe we should rely on SIGPIPE instead (which wait_or_whine always silences) and avoid the kill() call. Can there be a test for this case (i.e. having lots of untracked files in the submodule so the child process fills its pipe buffer and has to exit early)? Thanks, Jonathan