Git fork
at reftables-rust 64 lines 1.5 kB view raw
1#!/bin/sh 2 3test_description='git rev-list should notice bad commits' 4 5. ./test-lib.sh 6 7# Note: 8# - compression level is set to zero to make "corruptions" easier to perform 9# - reflog is disabled to avoid extra references which would twart the test 10 11test_expect_success 'setup' \ 12 ' 13 git init && 14 git config core.compression 0 && 15 git config core.logallrefupdates false && 16 echo "foo" > foo && 17 git add foo && 18 git commit -m "first commit" && 19 echo "bar" > bar && 20 git add bar && 21 git commit -m "second commit" && 22 echo "baz" > baz && 23 git add baz && 24 git commit -m "third commit" && 25 echo "foo again" >> foo && 26 git add foo && 27 git commit -m "fourth commit" && 28 git repack -a -f -d 29 ' 30 31test_expect_success 'verify number of revisions' \ 32 ' 33 revs=$(git rev-list --all | wc -l) && 34 test $revs -eq 4 && 35 first_commit=$(git rev-parse HEAD~3) 36 ' 37 38test_expect_success 'corrupt second commit object' ' 39 for p in .git/objects/pack/*.pack 40 do 41 chmod +w "$p" && 42 sed "s/second commit/socond commit/" "$p" >"$p.munged" && 43 mv "$p.munged" "$p" || 44 return 1 45 done && 46 test_must_fail git fsck --full 47' 48 49test_expect_success 'rev-list should fail' ' 50 test_must_fail env GIT_TEST_COMMIT_GRAPH=0 git -c core.commitGraph=false rev-list --all > /dev/null 51' 52 53test_expect_success 'git repack _MUST_ fail' \ 54 ' 55 test_must_fail git repack -a -f -d 56 ' 57 58test_expect_success 'first commit is still available' \ 59 ' 60 git log $first_commit 61 ' 62 63test_done 64