run-command API: don't fall back on online_cpus()

When a "jobs = 0" is passed let's BUG() out rather than fall back on online_cpus(). The default behavior was added when this API was implemented in c553c72eed6 (run-command: add an asynchronous parallel child processor, 2015-12-15). Most of our code in-tree that scales up to "online_cpus()" by default calls that function by itself. Keeping this default behavior just for the sake of two callers means that we'd need to maintain this one spot where we're second-guessing the config passed down into pp_init(). The preceding commit has an overview of the API callers that passed "jobs = 0". There were only two of them (actually three, but they resolved to these two config parsing codepaths). The "fetch.parallel" caller already had a test for the "fetch.parallel=0" case added in 0353c688189 (fetch: do not run a redundant fetch from submodule, 2022-05-16), but there was no such test for "submodule.fetchJobs". Let's add one here. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Ævar Arnfjörð Bjarmason committed Oct 12, 2022 at 23:02 UTC 51243f9f0f6a932ea579fd6f8014b348f8c2a523
4 files changed +14 -5
builtin/fetch.c
+2
@@ -122,6 +122,8 @@ static int git_fetch_config(const char *k, const char *v, void *cb)
122 fetch_parallel_config = git_config_int(k, v);
123 if (fetch_parallel_config < 0)
124 die(_("fetch.parallel cannot be negative"));
125 + if (!fetch_parallel_config)
126 + fetch_parallel_config = online_cpus();
127 return 0;
128 }
129
run-command.c
+3 -4
@@ -1564,8 +1564,8 @@ static void pp_init(struct parallel_processes *pp,
1564 task_finished_fn task_finished,
1565 void *data, int ungroup)
1566 {
1567 - if (n < 1)
1568 - n = online_cpus();
1567 + if (!n)
1568 + BUG("you must provide a non-zero number of processes!");
1569
1570 pp->max_processes = n;
1571
@@ -1835,8 +1835,7 @@ void run_processes_parallel_tr2(size_t n, get_next_task_fn get_next_task,
1835 task_finished_fn task_finished, void *pp_cb,
1836 const char *tr2_category, const char *tr2_label)
1837 {
1838 - trace2_region_enter_printf(tr2_category, tr2_label, NULL, "max:%d",
1839 - ((n < 1) ? online_cpus() : n));
1838 + trace2_region_enter_printf(tr2_category, tr2_label, NULL, "max:%d", n);
1839
1840 run_processes_parallel(n, get_next_task, start_failure,
1841 task_finished, pp_cb);
submodule-config.c
+2
@@ -303,6 +303,8 @@ int parse_submodule_fetchjobs(const char *var, const char *value)
303 int fetchjobs = git_config_int(var, value);
304 if (fetchjobs < 0)
305 die(_("negative values not allowed for submodule.fetchJobs"));
306 + if (!fetchjobs)
307 + fetchjobs = online_cpus();
308 return fetchjobs;
309 }
310
t/t5526-fetch-submodules.sh
+7 -1
@@ -714,7 +714,13 @@ test_expect_success 'fetching submodules respects parallel settings' '
714 GIT_TRACE=$(pwd)/trace.out git fetch &&
715 grep "8 tasks" trace.out &&
716 GIT_TRACE=$(pwd)/trace.out git fetch --jobs 9 &&
717 - grep "9 tasks" trace.out
717 + grep "9 tasks" trace.out &&
718 + >trace.out &&
719 +
720 + GIT_TRACE=$(pwd)/trace.out git -c submodule.fetchJobs=0 fetch &&
721 + grep "preparing to run up to [0-9]* tasks" trace.out &&
722 + ! grep "up to 0 tasks" trace.out &&
723 + >trace.out
724 )
725 '
726