]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t34xx: don't expire reflogs where it matters
authorPatrick Steinhardt <ps@pks.im>
Tue, 24 Feb 2026 08:45:47 +0000 (09:45 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 24 Feb 2026 15:33:19 +0000 (07:33 -0800)
We have a couple of tests in the t34xx range that rely on reflogs. This
never really used to be a problem, but in a subsequent commit we will
change the default maintenance strategy from "gc" to "geometric", and
this will cause us to drop all reflogs in these tests.

This may seem surprising and like a bug at first, but it's actually not.
The main difference between these two strategies is that the "gc"
strategy will skip all maintenance in case the object database is in a
well-optimized state. The "geometric" strategy has separate subtasks
though, and the conditions for each of these tasks is evaluated on a
case by case basis. This means that even if the object database is in
good shape, we may still decide to expire reflogs.

So why is that a problem? The issue is that Git's test suite hardcodes
the committer and author dates to a date in 2005. Interestingly though,
these hardcoded dates not only impact the commits, but also the reflog
entries. The consequence is that all newly written reflog entries are
immediately considered stale as our reflog expiration threshold is in
the range of weeks, only. It follows that executing `git reflog expire`
will thus immediately purge all reflog entries.

This hasn't been a problem in our test suite by pure chance, as the
repository shapes simply didn't cause us to perform actual garbage
collection. But with the upcoming "geometric" strategy we _will_ start
to execute `git reflog expire`, thus surfacing this issue.

Prepare for this by explicitly disabling reflog expiration in tests
impacted by this upcoming change.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t3404-rebase-interactive.sh
t/t3406-rebase-message.sh
t/t3431-rebase-fork-point.sh
t/t3432-rebase-fast-forward.sh

index e778dd8ae4a6dc5dd91c5f138fd3dd5020364e61..3e44562afaab4032787d928f0656d2b7f92f6d24 100755 (executable)
@@ -31,6 +31,12 @@ Initial setup:
 . "$TEST_DIRECTORY"/lib-rebase.sh
 
 test_expect_success 'setup' '
+       # Commit dates are hardcoded to 2005, and the reflog entries will have
+       # a matching timestamp. Maintenance may thus immediately expire
+       # reflogs if it was running.
+       git config set gc.reflogExpire never &&
+       git config set gc.reflogExpireUnreachable never &&
+
        git switch -C primary &&
        test_commit A file1 &&
        test_commit B file1 &&
index a1d7fa7f7c6965f49cc017303aca52a658211b10..bc51a9d3a70d552f5f0ba841f78c80b41f6d3229 100755 (executable)
@@ -8,6 +8,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 . ./test-lib.sh
 
 test_expect_success 'setup' '
+       # Commit dates are hardcoded to 2005, and the reflog entries will have
+       # a matching timestamp. Maintenance may thus immediately expire
+       # reflogs if it was running.
+       git config set gc.reflogExpire never &&
+       git config set gc.reflogExpireUnreachable never &&
+
        test_commit O fileO &&
        test_commit X fileX &&
        git branch fast-forward &&
index be09fc78c16aab1fe525daeaa1348a9db5cec9a6..4336f417c27a7ca19824430cb02549679a6104ec 100755 (executable)
@@ -17,6 +17,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 # C was formerly part of main but main was rewound to remove C
 #
 test_expect_success setup '
+       # Commit dates are hardcoded to 2005, and the reflog entries will have
+       # a matching timestamp. Maintenance may thus immediately expire
+       # reflogs if it was running.
+       git config set gc.reflogExpire never &&
+       git config set gc.reflogExpireUnreachable never &&
+
        test_commit A &&
        test_commit B &&
        test_commit C &&
index 5086e14c02207184bd7c048ee2bc2419ad4d1b34..181d19dcc14a5e3d99ddbb72a39b0e63cf526e76 100755 (executable)
@@ -11,6 +11,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
 . ./test-lib.sh
 
 test_expect_success setup '
+       # Commit dates are hardcoded to 2005, and the reflog entries will have
+       # a matching timestamp. Maintenance may thus immediately expire
+       # reflogs if it was running.
+       git config set gc.reflogExpire never &&
+       git config set gc.reflogExpireUnreachable never &&
+
        test_commit A &&
        test_commit B &&
        test_commit C &&