[PATCH 0/8] builtin/maintenance: use "geometric" strategy by default
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Feb 20, 2026, 10:15 UTC
- Message-ID
- <20260220-b4-pks-maintenance-default-geometric-strategy-v1-0-faeb321ad13b@pks.im>
Hi,
this series converts our default strategy used by git-maintenance(1) from "gc" to "geometric". The aim of this is twofold:
- It completes the conversion to a more flexible infrastructure for
repository maintenance. git-maintenance(1) is structured around
tasks that can be toggled on/off as needed, and this is a lot easier
to extend going forward. - We start to use a more efficient repacking strategy by default,
which should especially help large repositories out there.Out of these two, I think that the first point is actually the more important one.
Unfortunately, a lot of our tests are racy or will fail with the new strategy. This is mostly because the new strategy may decide to optimize data structures in cases where the old strategy didn't, and because the tasks we perform might be different. The majority of this patch series thus adapts our tests accordingly. The actual change is a one-line change in the final commit.
I was a bit torn initially whether or not I want to make the geometric strategy the default right away, or whether we might first want to use "feature.experimental" as an additional step. I'm quite happy to adapt the series accordingly, but for the initial version I thought it might invite more discussions if I pick the nuclear option :)
Of course, no matter how we do this, it is still possible to revert back to the old strategy by setting "maintenance.strategy=gc".
Thanks!
Patrick
---
Patrick Steinhardt (8):
t: fix races caused by background maintenance
t: disable maintenance where we verify object database structure
t34xx: don't expire reflogs where it matters
t5400: explicitly use "gc" strategy
t5510: explicitly use "gc" strategy
t6500: explicitly use "gc" strategy
t7900: prepare for switch of the default strategy
builtin/maintenance: use "geometric" strategy by defaultbuiltin/gc.c | 2 +- run-command.c | 2 +- t/t0081-find-pack.sh | 1 + t/t3404-rebase-interactive.sh | 2 ++ t/t3406-rebase-message.sh | 3 +++ t/t3431-rebase-fork-point.sh | 2 ++ t/t3432-rebase-fast-forward.sh | 2 ++ t/t5316-pack-delta-depth.sh | 1 + t/t5319-multi-pack-index.sh | 1 + t/t5326-multi-pack-bitmaps.sh | 3 ++- t/t5327-multi-pack-bitmaps-rev.sh | 3 ++- t/t5331-pack-objects-stdin.sh | 2 ++ t/t5332-multi-pack-reuse.sh | 1 + t/t5334-incremental-multi-pack-index.sh | 1 + t/t5400-send-pack.sh | 1 + t/t5500-fetch-pack.sh | 3 ++- t/t5510-fetch.sh | 1 + t/t5616-partial-clone.sh | 7 ++++--- t/t6500-gc.sh | 1 + t/t7700-repack.sh | 3 +++ t/t7900-maintenance.sh | 7 ++++++- t/test-lib.sh | 4 ++++ 22 files changed, 44 insertions(+), 9 deletions(-)
--- base-commit: 73fd77805fc6406f31c36212846d9e2541d19321 change-id: 20260218-b4-pks-maintenance-default-geometric-strategy-17fcedf92461