From 5fb9b8b4a685ee2767a2e8a63e11ba26b77a1125 Mon Sep 17 00:00:00 2001 From: Patrick Steinhardt Date: Wed, 12 Aug 2026 12:11:46 +0200 Subject: [PATCH 1/2] t7900: adapt some tests to use a throwaway repository Many of the tests in t7900 operate inside the main trash repository that's set up by default by our test suite. This is overall quite fragile as we're exercising repository maintenance in those tests, and maintenance is of course intricately tied towards the on-disk state of a repository. Consequently, the tests can easily impact one another. Furthermore, in the next commit we'll have to modify the environment in a handful of those tests. As tests don't run in a subshell, doing so would impact all subsequent tests by default, as well. Adapt exactly those tests to use a throwaway repository. This makes the tests more neatly self-contained and allows us to trivially modify the environment in the next commit. Note that we adapt calls to `test_config ()` to use git-config(1) instead. This is because on the one hand we don't need the auto-revert logic of `test_config ()` as we're using a throwaway repository anyway. On the other hand it's not possible to use `test_config ()` as it uses `test_when_finished ()`, which errors out when we run it in a subshell. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- t/t7900-maintenance.sh | 70 ++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh index d7f82e1bec..8b5614cf59 100755 --- a/t/t7900-maintenance.sh +++ b/t/t7900-maintenance.sh @@ -61,41 +61,57 @@ test_expect_success 'run [--auto|--quiet] with gc strategy' ' ' test_expect_success 'maintenance.auto config option' ' - GIT_TRACE2_EVENT="$(pwd)/default" git commit --quiet --allow-empty -m 1 && - test_subcommand git maintenance run --auto --quiet --detach Date: Wed, 12 Aug 2026 12:11:47 +0200 Subject: [PATCH 2/2] t7900: fix flaky "maintenance.strategy" test One of our tests for whether "maintenance.strategy" is being respected in t7900 is flaky in our CI systems: + GIT_TRACE2_EVENT=/tmp/test-output/trash directory.t7900-maintenance/repo/trace2.txt git -c maintenance.strategy=incremental maintenance run --quiet + test_maintenance_tasks trace2.txt + cat + sed -ne s/.*"region_enter".*"category":"maintenance\([^"]*\)".*"label":"\([^"][^"]*\)".*/\2\1/p trace2.txt + test_cmp expect actual + test 2 -ne 2 + eval /usr/bin/diff -u "$@" + /usr/bin/diff -u expect actual --- expect 2026-08-07 06:20:51.388322602 +0000 +++ actual 2026-08-07 06:20:51.388322602 +0000 @@ -1,2 +0,0 @@ -gc foreground -gc When running with the "incremental" strategy, we expect two git-gc(1) tasks to have been executed, but sometimes the test simply doesn't execute any of those tasks. A first hunch may be that maybe the disk-state is sometimes different and thus we decide not to run maintenance. But git-maintenance(1) doesn't run with the "--auto" switch, so we should execute those tasks regardless of the on-disk state. But there's a second condition that may cause us to not execute tasks, namely when the "maintenance.lock" file exists due to a concurrently running git-maintenance(1) process. We usually disable auto-maintenance from detaching in our test suite to avoid exactly these kinds of race conditions by exporting `GIT_TEST_MAINT_AUTO_DETACH=false`. But in t7900 we unset "GIT_TEST_MAINT_AUTO_DETACH" and thus enable the auto-detach logic. The intent of this is to exercise git-maintenance(1) closer to how it would run in a real-world scenario, but it does cause us to race when the detached maintenance job that was triggered by `test_commit()` lives long enough. We could trivially fix this race by disabling auto-maintenance for this specific test. But that doesn't fix this class of races in this test suite: while I haven't seen any of the other tests fail in the same way, a bunch of them have this race, as well. Instead, let's retain "GIT_TEST_MAINT_AUTO_DETACH" and only unset it as required. Signed-off-by: Patrick Steinhardt Signed-off-by: Junio C Hamano --- t/t7900-maintenance.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh index 8b5614cf59..d228a5e182 100755 --- a/t/t7900-maintenance.sh +++ b/t/t7900-maintenance.sh @@ -7,9 +7,6 @@ test_description='git maintenance builtin' GIT_TEST_COMMIT_GRAPH=0 GIT_TEST_MULTI_PACK_INDEX=0 -# Ensure that auto-maintenance detaches as usual. -sane_unset GIT_TEST_MAINT_AUTO_DETACH - test_lazy_prereq XMLLINT ' xmllint --version ' @@ -65,6 +62,7 @@ test_expect_success 'maintenance.auto config option' ' git init repo && ( cd repo && + sane_unset GIT_TEST_MAINT_AUTO_DETACH && GIT_TRACE2_EVENT="$(pwd)/default" git commit --quiet --allow-empty -m 1 && test_subcommand git maintenance run --auto --quiet --detach