-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
restore legacy behavior for read_sha1_file()
Since commit 8eca0b4, it is possible for read_sha1_file() to return NULL even with existing objects when they are corrupted. Previously a corrupted object would have terminated the program immediately, effectively making read_sha1_file() return NULL only when specified object is not found. Let's restore this behavior for all users of read_sha1_file() and provide a separate function with the ability to not terminate when bad objects are encountered. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
Nicolas Pitre
authored and
Junio C Hamano
committed
Jul 15, 2008
1 parent
25a1f37
commit ac93910
Showing
3 changed files
with
89 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
#!/bin/sh | ||
|
||
test_description='git rev-list should notice bad commits' | ||
|
||
. ./test-lib.sh | ||
|
||
# Note: | ||
# - compression level is set to zero to make "corruptions" easier to perform | ||
# - reflog is disabled to avoid extra references which would twart the test | ||
|
||
test_expect_success 'setup' \ | ||
' | ||
git init && | ||
git config core.compression 0 && | ||
git config core.logallrefupdates false && | ||
echo "foo" > foo && | ||
git add foo && | ||
git commit -m "first commit" && | ||
echo "bar" > bar && | ||
git add bar && | ||
git commit -m "second commit" && | ||
echo "baz" > baz && | ||
git add baz && | ||
git commit -m "third commit" && | ||
echo "foo again" >> foo && | ||
git add foo && | ||
git commit -m "fourth commit" && | ||
git repack -a -f -d | ||
' | ||
|
||
test_expect_success 'verify number of revisions' \ | ||
' | ||
revs=$(git rev-list --all | wc -l) && | ||
test $revs -eq 4 && | ||
first_commit=$(git rev-parse HEAD~3) | ||
' | ||
|
||
test_expect_success 'corrupt second commit object' \ | ||
' | ||
perl -i.bak -pe "s/second commit/socond commit/" .git/objects/pack/*.pack && | ||
test_must_fail git fsck --full | ||
' | ||
|
||
test_expect_success 'rev-list should fail' \ | ||
' | ||
test_must_fail git rev-list --all > /dev/null | ||
' | ||
|
||
test_expect_success 'git repack _MUST_ fail' \ | ||
' | ||
test_must_fail git repack -a -f -d | ||
' | ||
|
||
test_expect_success 'first commit is still available' \ | ||
' | ||
git log $first_commit | ||
' | ||
|
||
test_done | ||
|