This series changes the run-command API so that we pass options via a struct instead of via the argument list, the end result is that an API user looks like e.g.: + const struct run_process_parallel_opts opts = { + .tr2_category = "submodule", + .tr2_label = "parallel/update", + + .jobs = update_data->max_jobs, + + .get_next_task = update_clone_get_next_task, + .start_failure = update_clone_start_failure, + .task_finished = update_clone_task_finished, + .data = &suc, + }; [...] - run_processes_parallel_tr2(suc.update_data->max_jobs, update_clone_get_next_task, - update_clone_start_failure, - update_clone_task_finished, &suc, "submodule", - "parallel/update"); + run_processes_parallel(&opts); These patches are derived from earlier patches I sent for passing the the "ungroup" parameter to this API[1], that's currently done with a global variable, because we needed a minimal change for a regression fix. I'm submitting this now in the rc phase because there's another concurrent series that could make use of this[2]. The alternative would be for it to add an extra parameter to the two functions (one after this series). The upcoming migration to the new hook API and config-based hooks[3] will also benefit significantly from this. I have a version of that topic rebased on top of this, having this first gets rid of a lot of churn, adding an optional callback just requires adding things to the struct introduced here, not changing every single caller. (Passing) CI at: https://github.com/avar/git/tree/avar/hook-run-process-parallel-tty-regression-2-argument-passing 1. https://lore.kernel.org/git/cover-v3-0.2-00000000000-20220527T090618Z-avarab@xxxxxxxxx/ 2. https://lore.kernel.org/git/20220922232947.631309-1-calvinwan@xxxxxxxxxx/ 3. https://lore.kernel.org/git/cover-v5-00.36-00000000000-20210902T125110Z-avarab@xxxxxxxxx/ Brief commentary on individual patches below: Ævar Arnfjörð Bjarmason (15): hook tests: fix redirection logic error in 96e7225b310 submodule tests: reset "trace.out" between "grep" invocations These bugfixes could be split out I suppose, but since we're changing this area 1/15 seemed prudent, 2/15 is required for a later test addition run-command tests: test stdout of run_command_parallel() Tighten up tests, was ejected from the "ungroup" topic. run-command test helper: use "else if" pattern run-command tests: use "return", not "exit" Just setup for later changes. run-command API: have "run_processes_parallel{,_tr2}()" return void Turns out we've never used the boilerplate return value for anything useful ever. run-command API: make "jobs" parameter an "unsigned int" run-command API: don't fall back on online_cpus() This allows us to make the "opts" struct "const", which helps a lot in passing it around later on. run-command.c: add an initializer for "struct parallel_processes" run-command API: add nascent "struct run_process_parallel_opts" run-command API: make run_process_parallel{,_tr2}() thin wrappers run-command API: have run_process_parallel() take an "opts" struct run-command API: move *_tr2() users to "run_processes_parallel()" This is arguably one logical change (and at some point I had it as such), but as the diff would be really large I've tried to split this into easily digestable steps. run-command.c: don't copy *_fn to "struct parallel_processes" run-command.c: don't copy "ungroup" to "struct parallel_processes" The only reason for copying various parameters into "struct parallel_processes" was because we passed them as positionals, now that we have an "opts" struct we can just pass that along instead. This leaves the "struct parallel_processes" in run-command.c purely for managing our own internal state. By avoiding this copying we also cut down a lot on the boilerplate needed to add a new parameter. builtin/fetch.c | 25 +++--- builtin/submodule--helper.c | 16 +++- hook.c | 23 +++--- run-command.c | 152 ++++++++++++++---------------------- run-command.h | 71 ++++++++++++----- submodule-config.c | 2 + submodule.c | 18 +++-- t/helper/test-run-command.c | 77 +++++++++++------- t/t0061-run-command.sh | 25 +++--- t/t1800-hook.sh | 2 +- t/t5526-fetch-submodules.sh | 16 +++- 11 files changed, 247 insertions(+), 180 deletions(-) -- 2.38.0.rc2.935.g6b421ae1592