builtin/gc: split out function to expire reflog entries

We're about to introduce a new task for git-maintenance(1) that knows to expire reflog entries. The logic will be shared with git-gc(1), which already knows how to do this. Pull out the common logic into a separate function so that we can share the implementation between both builtins. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Apr 8, 2025 at 08:22 UTC 3fef24ac3fbcc6ad9e325a293b59ee38645f2407
1 file changed +11 -11
builtin/gc.c
+11 -11
@@ -53,7 +53,6 @@ static const char * const builtin_gc_usage[] = {
53
54 static timestamp_t gc_log_expire_time;
55
56 -static struct strvec reflog = STRVEC_INIT;
56 static struct strvec repack = STRVEC_INIT;
57 static struct strvec prune = STRVEC_INIT;
58 static struct strvec prune_worktrees = STRVEC_INIT;
@@ -286,6 +285,15 @@ static int maintenance_task_pack_refs(struct maintenance_run_opts *opts,
285 return run_command(&cmd);
286 }
287
288 +static int maintenance_task_reflog_expire(struct maintenance_run_opts *opts UNUSED,
289 + struct gc_config *cfg UNUSED)
290 +{
291 + struct child_process cmd = CHILD_PROCESS_INIT;
292 + cmd.git_cmd = 1;
293 + strvec_pushl(&cmd.args, "reflog", "expire", "--all", NULL);
294 + return run_command(&cmd);
295 +}
296 +
297 static int too_many_loose_objects(struct gc_config *cfg)
298 {
299 /*
@@ -662,15 +670,8 @@ static void gc_before_repack(struct maintenance_run_opts *opts,
670
671 if (cfg->pack_refs && maintenance_task_pack_refs(opts, cfg))
672 die(FAILED_RUN, "pack-refs");
665 -
666 - if (cfg->prune_reflogs) {
667 - struct child_process cmd = CHILD_PROCESS_INIT;
668 -
669 - cmd.git_cmd = 1;
670 - strvec_pushv(&cmd.args, reflog.v);
671 - if (run_command(&cmd))
672 - die(FAILED_RUN, reflog.v[0]);
673 - }
673 + if (cfg->prune_reflogs && maintenance_task_reflog_expire(opts, cfg))
674 + die(FAILED_RUN, "reflog");
675 }
676
677 int cmd_gc(int argc,
@@ -718,7 +719,6 @@ struct repository *repo UNUSED)
719 show_usage_with_options_if_asked(argc, argv,
720 builtin_gc_usage, builtin_gc_options);
721
721 - strvec_pushl(&reflog, "reflog", "expire", "--all", NULL);
722 strvec_pushl(&repack, "repack", "-d", "-l", NULL);
723 strvec_pushl(&prune, "prune", "--expire", NULL);
724 strvec_pushl(&prune_worktrees, "worktree", "prune", "--expire", NULL);