builtin/maintenance: extract function to run tasks

Extract the function to run maintenance tasks. This function will be reused in a subsequent commit where we introduce a split between maintenance tasks that run before and after daemonizing the process. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Jun 3, 2025 at 16:01 UTC 2aa9ee7eecc696fe93a8f00b0eb2369de5279aaa
1 file changed +23 -12
builtin/gc.c
+23 -12
@@ -1596,6 +1596,27 @@ static const struct maintenance_task tasks[] = {
1596 },
1597 };
1598
1599 +static int maybe_run_task(const struct maintenance_task *task,
1600 + struct repository *repo,
1601 + struct maintenance_run_opts *opts,
1602 + struct gc_config *cfg)
1603 +{
1604 + int ret = 0;
1605 +
1606 + if (opts->auto_flag &&
1607 + (!task->auto_condition || !task->auto_condition(cfg)))
1608 + return 0;
1609 +
1610 + trace2_region_enter("maintenance", task->name, repo);
1611 + if (task->fn(opts, cfg)) {
1612 + error(_("task '%s' failed"), task->name);
1613 + ret = 1;
1614 + }
1615 + trace2_region_leave("maintenance", task->name, repo);
1616 +
1617 + return ret;
1618 +}
1619 +
1620 static int maintenance_run_tasks(struct maintenance_run_opts *opts,
1621 struct gc_config *cfg)
1622 {
@@ -1627,19 +1648,9 @@ static int maintenance_run_tasks(struct maintenance_run_opts *opts,
1648 trace2_region_leave("maintenance", "detach", the_repository);
1649 }
1650
1630 - for (size_t i = 0; i < opts->tasks_nr; i++) {
1631 - if (opts->auto_flag &&
1632 - (!tasks[opts->tasks[i]].auto_condition ||
1633 - !tasks[opts->tasks[i]].auto_condition(cfg)))
1634 - continue;
1635 -
1636 - trace2_region_enter("maintenance", tasks[opts->tasks[i]].name, r);
1637 - if (tasks[opts->tasks[i]].fn(opts, cfg)) {
1638 - error(_("task '%s' failed"), tasks[opts->tasks[i]].name);
1651 + for (size_t i = 0; i < opts->tasks_nr; i++)
1652 + if (maybe_run_task(&tasks[opts->tasks[i]], r, opts, cfg))
1653 result = 1;
1640 - }
1641 - trace2_region_leave("maintenance", tasks[opts->tasks[i]].name, r);
1642 - }
1654
1655 rollback_lock_file(&lk);
1656 return result;