diff options
author | Junio C Hamano <gitster@pobox.com> | 2020-12-08 23:11:18 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-12-08 23:11:18 (GMT) |
commit | 6bac6a1ef9e9c2bcf6f927e2e58e66ef39659e93 (patch) | |
tree | c057a0c62c6c55a57dd52b18e40b6655646028e1 /t/t5319-multi-pack-index.sh | |
parent | 1bc550effee121c930e877fed3b9dc20935959de (diff) | |
parent | 506ec2fbda5334c4fc60fbd9f425fff3916a2066 (diff) | |
download | git-6bac6a1ef9e9c2bcf6f927e2e58e66ef39659e93.zip git-6bac6a1ef9e9c2bcf6f927e2e58e66ef39659e93.tar.gz git-6bac6a1ef9e9c2bcf6f927e2e58e66ef39659e93.tar.bz2 |
Merge branch 'tb/idx-midx-race-fix'
Processes that access packdata while the .idx file gets removed
(e.g. while repacking) did not fail or fall back gracefully as they
could.
* tb/idx-midx-race-fix:
midx.c: protect against disappearing packs
packfile.c: protect against disappearing indexes
Diffstat (limited to 't/t5319-multi-pack-index.sh')
-rwxr-xr-x | t/t5319-multi-pack-index.sh | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/t/t5319-multi-pack-index.sh b/t/t5319-multi-pack-index.sh index ace469c..297de50 100755 --- a/t/t5319-multi-pack-index.sh +++ b/t/t5319-multi-pack-index.sh @@ -138,7 +138,7 @@ test_expect_success 'write midx with one v2 pack' ' compare_results_with_midx "one v2 pack" -test_expect_success 'corrupt idx not opened' ' +test_expect_success 'corrupt idx reports errors' ' idx=$(test-tool read-midx $objdir | grep "\.idx\$") && mv $objdir/pack/$idx backup-$idx && test_when_finished "mv backup-\$idx \$objdir/pack/\$idx" && @@ -149,7 +149,7 @@ test_expect_success 'corrupt idx not opened' ' test_copy_bytes 1064 <backup-$idx >$objdir/pack/$idx && git -c core.multiPackIndex=true rev-list --objects --all 2>err && - test_must_be_empty err + grep "index unavailable" err ' test_expect_success 'add more objects' ' @@ -755,4 +755,30 @@ test_expect_success 'repack --batch-size=<large> repacks everything' ' ) ' +test_expect_success 'load reverse index when missing .idx, .pack' ' + git init repo && + test_when_finished "rm -fr repo" && + ( + cd repo && + + git config core.multiPackIndex true && + + test_commit base && + git repack -ad && + git multi-pack-index write && + + git rev-parse HEAD >tip && + pack=$(ls .git/objects/pack/pack-*.pack) && + idx=$(ls .git/objects/pack/pack-*.idx) && + + mv $idx $idx.bak && + git cat-file --batch-check="%(objectsize:disk)" <tip && + + mv $idx.bak $idx && + + mv $pack $pack.bak && + git cat-file --batch-check="%(objectsize:disk)" <tip + ) +' + test_done |