aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2025-06-03 16:01:17 +0200
committerJunio C Hamano <gitster@pobox.com>2025-06-03 08:30:51 -0700
commitc367852d9e3c114fe02e16f4d56f259f12188e2a (patch)
treeaa19155bfd59a9ebe59415d6adb888681da398a2
parentbuiltin/maintenance: split into foreground and background tasks (diff)
downloadgit-c367852d9e3c114fe02e16f4d56f259f12188e2a.tar.gz
git-c367852d9e3c114fe02e16f4d56f259f12188e2a.zip
builtin/maintenance: fix locking race with refs and reflogs tasks
As explained in the preceding commit, git-gc(1) knows to detach only after it has already packed references and expired reflogs. This is done to avoid racing around their respective lockfiles. Adapt git-maintenance(1) accordingly and run the "pack-refs" and "reflog-expire" tasks in the foreground. Note that the "gc" task has the same issue, but the fix is a bit more involved there and will thus be done in a subsequent commit. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/gc.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/builtin/gc.c b/builtin/gc.c
index 72a695853e..fdd0dd09be 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -1587,12 +1587,12 @@ static const struct maintenance_task tasks[] = {
},
[TASK_PACK_REFS] = {
.name = "pack-refs",
- .background = maintenance_task_pack_refs,
+ .foreground = maintenance_task_pack_refs,
.auto_condition = pack_refs_condition,
},
[TASK_REFLOG_EXPIRE] = {
.name = "reflog-expire",
- .background = maintenance_task_reflog_expire,
+ .foreground = maintenance_task_reflog_expire,
.auto_condition = reflog_expire_condition,
},
[TASK_WORKTREE_PRUNE] = {