Skip to content

Commit ea7d894

Browse files
pks-tgitster
authored andcommitted
t34xx: don't expire reflogs where it matters
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>
1 parent 5e6c612 commit ea7d894

4 files changed

Lines changed: 24 additions & 0 deletions

File tree

t/t3404-rebase-interactive.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ Initial setup:
3131
. "$TEST_DIRECTORY"/lib-rebase.sh
3232

3333
test_expect_success 'setup' '
34+
# Commit dates are hardcoded to 2005, and the reflog entries will have
35+
# a matching timestamp. Maintenance may thus immediately expire
36+
# reflogs if it was running.
37+
git config set gc.reflogExpire never &&
38+
git config set gc.reflogExpireUnreachable never &&
39+
3440
git switch -C primary &&
3541
test_commit A file1 &&
3642
test_commit B file1 &&

t/t3406-rebase-message.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
88
. ./test-lib.sh
99

1010
test_expect_success 'setup' '
11+
# Commit dates are hardcoded to 2005, and the reflog entries will have
12+
# a matching timestamp. Maintenance may thus immediately expire
13+
# reflogs if it was running.
14+
git config set gc.reflogExpire never &&
15+
git config set gc.reflogExpireUnreachable never &&
16+
1117
test_commit O fileO &&
1218
test_commit X fileX &&
1319
git branch fast-forward &&

t/t3431-rebase-fork-point.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
1717
# C was formerly part of main but main was rewound to remove C
1818
#
1919
test_expect_success setup '
20+
# Commit dates are hardcoded to 2005, and the reflog entries will have
21+
# a matching timestamp. Maintenance may thus immediately expire
22+
# reflogs if it was running.
23+
git config set gc.reflogExpire never &&
24+
git config set gc.reflogExpireUnreachable never &&
25+
2026
test_commit A &&
2127
test_commit B &&
2228
test_commit C &&

t/t3432-rebase-fast-forward.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
1111
. ./test-lib.sh
1212

1313
test_expect_success setup '
14+
# Commit dates are hardcoded to 2005, and the reflog entries will have
15+
# a matching timestamp. Maintenance may thus immediately expire
16+
# reflogs if it was running.
17+
git config set gc.reflogExpire never &&
18+
git config set gc.reflogExpireUnreachable never &&
19+
1420
test_commit A &&
1521
test_commit B &&
1622
test_commit C &&

0 commit comments

Comments
 (0)