Merge branch 'ps/reflog-expiry-fix' into jch

The default expiry periods for both reachable and unreachable reflog
entries have been corrected from a past regression that swapped
them.

* ps/reflog-expiry-fix:
  reflog: fix default expiry periods
Junio C Hamano 2026-09-28 11:03:59 -07:00
commit 82ba0821b6
2 changed files with 68 additions and 2 deletions

View File

@ -23,8 +23,8 @@ struct reflog_expire_options {
int recno;
};
#define REFLOG_EXPIRE_OPTIONS_INIT(now) { \
.default_expire_total = now - 30 * 24 * 3600, \
.default_expire_unreachable = now - 90 * 24 * 3600, \
.default_expire_total = now - 90 * 24 * 3600, \
.default_expire_unreachable = now - 30 * 24 * 3600, \
}

/*

View File

@ -153,6 +153,72 @@ test_expect_success 'reflog expire should not barf on an annotated tag' '
test_grep ! "error: [Oo]bject .* not a commit" err
'

test_expect_success 'reflog expire keeps reachable entries for 90 days' '
test_when_finished "rm -rf reachable-keep" &&
git init reachable-keep &&
(
cd reachable-keep &&
timestamp=$(test-tool date timestamp "60.days.ago") &&
timestamp=${timestamp#* -> } &&
test_commit --no-tag --date "$timestamp +0000" old &&
git reflog expire --all &&
test_stdout_line_count = 1 git reflog refs/heads/main
)
'

test_expect_success 'reflog expire removes reachable entries after 90 days' '
test_when_finished "rm -rf reachable-expire" &&
git init reachable-expire &&
(
cd reachable-expire &&
timestamp=$(test-tool date timestamp "100.days.ago") &&
timestamp=${timestamp#* -> } &&
test_commit --no-tag --date "$timestamp +0000" old &&
git reflog expire --all &&
test_stdout_line_count = 0 git reflog refs/heads/main
)
'

test_expect_success 'reflog expire keeps unreachable entries for 30 days' '
test_when_finished "rm -rf unreachable-keep" &&
git init unreachable-keep &&
(
cd unreachable-keep &&
test_commit --no-tag base &&
base=$(git rev-parse HEAD) &&
timestamp=$(test-tool date timestamp "20.days.ago") &&
timestamp=${timestamp#* -> } &&
test_commit --no-tag --date "$timestamp +0000" old &&
old=$(git rev-parse HEAD) &&
git update-ref refs/heads/main "$base" &&
git rev-list --all --objects >reachable &&
test_grep ! "$old" reachable &&
git reflog expire --all &&
git reflog --format='%H' refs/heads/main >actual &&
test_grep "$old" actual
)
'

test_expect_success 'reflog expire removes unreachable entries after 30 days' '
test_when_finished "rm -rf unreachable-expire" &&
git init unreachable-expire &&
(
cd unreachable-expire &&
test_commit --no-tag base &&
base=$(git rev-parse HEAD) &&
timestamp=$(test-tool date timestamp "40.days.ago") &&
timestamp=${timestamp#* -> } &&
test_commit --no-tag --date "$timestamp +0000" old &&
old=$(git rev-parse HEAD) &&
git update-ref refs/heads/main "$base" &&
git rev-list --all --objects >reachable &&
test_grep ! "$old" reachable &&
git reflog expire --all &&
git reflog --format='%H' refs/heads/main >actual &&
test_grep ! "$old" actual
)
'

test_expect_success 'corrupt and check' '

corrupt $F &&