
The Generation Data Chunk was implemented and tested in e8b63005c (commit-graph: implement generation data chunk, 2021-01-16), but the test was carefully constructed to work on systems with 32-bit dates. Since the corrected commit date offsets still required more than 31 bits, this triggered writing the generation_data_overflow chunk. However, upon closer look, the write_graph_chunk_generation_data_overflow() method writes the offsets to the chunk (as dictated by the format) but fill_commit_graph_info() treats the value in the chunk as if it is the full corrected commit date (not an offset). For some reason, this does not cause an issue when using the FUTURE_DATE specified in t5318-commit-graph.sh, but it does show up as a failure in 'git commit-graph verify' if we increase that FUTURE_DATE to be above four billion. Fix this error and create a 64-bit timestamp version of the test so we can test these larger values. Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
67 lines
2.0 KiB
Bash
Executable File
67 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='commit graph with 64-bit timestamps'
|
|
. ./test-lib.sh
|
|
|
|
if ! test_have_prereq TIME_IS_64BIT || ! test_have_prereq TIME_T_IS_64BIT
|
|
then
|
|
skip_all='skipping 64-bit timestamp tests'
|
|
test_done
|
|
fi
|
|
|
|
. "$TEST_DIRECTORY"/lib-commit-graph.sh
|
|
|
|
UNIX_EPOCH_ZERO="@0 +0000"
|
|
FUTURE_DATE="@4147483646 +0000"
|
|
|
|
GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=0
|
|
|
|
test_expect_success 'lower layers have overflow chunk' '
|
|
rm -f .git/objects/info/commit-graph &&
|
|
test_commit --date "$FUTURE_DATE" future-1 &&
|
|
test_commit --date "$UNIX_EPOCH_ZERO" old-1 &&
|
|
git commit-graph write --reachable &&
|
|
test_commit --date "$FUTURE_DATE" future-2 &&
|
|
test_commit --date "$UNIX_EPOCH_ZERO" old-2 &&
|
|
git commit-graph write --reachable --split=no-merge &&
|
|
test_commit extra &&
|
|
git commit-graph write --reachable --split=no-merge &&
|
|
git commit-graph write --reachable &&
|
|
graph_read_expect 5 "generation_data generation_data_overflow" &&
|
|
mv .git/objects/info/commit-graph commit-graph-upgraded &&
|
|
git commit-graph write --reachable &&
|
|
graph_read_expect 5 "generation_data generation_data_overflow" &&
|
|
test_cmp .git/objects/info/commit-graph commit-graph-upgraded
|
|
'
|
|
|
|
graph_git_behavior 'overflow' '' HEAD~2 HEAD
|
|
|
|
test_expect_success 'set up and verify repo with generation data overflow chunk' '
|
|
mkdir repo &&
|
|
cd repo &&
|
|
git init &&
|
|
test_commit --date "$UNIX_EPOCH_ZERO" 1 &&
|
|
test_commit 2 &&
|
|
test_commit --date "$UNIX_EPOCH_ZERO" 3 &&
|
|
git commit-graph write --reachable &&
|
|
graph_read_expect 3 generation_data &&
|
|
test_commit --date "$FUTURE_DATE" 4 &&
|
|
test_commit 5 &&
|
|
test_commit --date "$UNIX_EPOCH_ZERO" 6 &&
|
|
git branch left &&
|
|
git reset --hard 3 &&
|
|
test_commit 7 &&
|
|
test_commit --date "$FUTURE_DATE" 8 &&
|
|
test_commit 9 &&
|
|
git branch right &&
|
|
git reset --hard 3 &&
|
|
test_merge M left right &&
|
|
git commit-graph write --reachable &&
|
|
graph_read_expect 10 "generation_data generation_data_overflow" &&
|
|
git commit-graph verify
|
|
'
|
|
|
|
graph_git_behavior 'overflow 2' repo left right
|
|
|
|
test_done
|