aboutsummaryrefslogtreecommitdiffstats
path: root/builtin/gc.c
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2025-06-03 16:01:14 +0200
committerJunio C Hamano <gitster@pobox.com>2025-06-03 08:30:50 -0700
commit2aa9ee7eecc696fe93a8f00b0eb2369de5279aaa (patch)
treea6bed3d6e2058a962171a8dbc6833c2dc3def2ad /builtin/gc.c
parent38a8fa5a9a3a74dd606ba37702689a8b07c084bf (diff)
downloadgit-2aa9ee7eecc696fe93a8f00b0eb2369de5279aaa.tar.gz
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>
Diffstat (limited to 'builtin/gc.c')
-rw-r--r--builtin/gc.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/builtin/gc.c b/builtin/gc.c
index 4d636237ca..cfbf9d8a2b 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -1596,6 +1596,27 @@ static const struct maintenance_task tasks[] = {
},
};
+static int maybe_run_task(const struct maintenance_task *task,
+ struct repository *repo,
+ struct maintenance_run_opts *opts,
+ struct gc_config *cfg)
+{
+ int ret = 0;
+
+ if (opts->auto_flag &&
+ (!task->auto_condition || !task->auto_condition(cfg)))
+ return 0;
+
+ trace2_region_enter("maintenance", task->name, repo);
+ if (task->fn(opts, cfg)) {
+ error(_("task '%s' failed"), task->name);
+ ret = 1;
+ }
+ trace2_region_leave("maintenance", task->name, repo);
+
+ return ret;
+}
+
static int maintenance_run_tasks(struct maintenance_run_opts *opts,
struct gc_config *cfg)
{
@@ -1627,19 +1648,9 @@ static int maintenance_run_tasks(struct maintenance_run_opts *opts,
trace2_region_leave("maintenance", "detach", the_repository);
}
- for (size_t i = 0; i < opts->tasks_nr; i++) {
- if (opts->auto_flag &&
- (!tasks[opts->tasks[i]].auto_condition ||
- !tasks[opts->tasks[i]].auto_condition(cfg)))
- continue;
-
- trace2_region_enter("maintenance", tasks[opts->tasks[i]].name, r);
- if (tasks[opts->tasks[i]].fn(opts, cfg)) {
- error(_("task '%s' failed"), tasks[opts->tasks[i]].name);
+ for (size_t i = 0; i < opts->tasks_nr; i++)
+ if (maybe_run_task(&tasks[opts->tasks[i]], r, opts, cfg))
result = 1;
- }
- trace2_region_leave("maintenance", tasks[opts->tasks[i]].name, r);
- }
rollback_lock_file(&lk);
return result;