fsck: exit with non-zero status upon error from fsck_obj()
Upon finding a corrupt loose object, we forgot to note the error to signal it with the exit status of the entire process. [jc: adjusted t1450 and added another test] Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d31f3ad23d
commit
2e770fe47e
@ -389,7 +389,8 @@ static void fsck_sha1_list(void)
|
||||
unsigned char *sha1 = entry->sha1;
|
||||
|
||||
sha1_list.entry[i] = NULL;
|
||||
fsck_sha1(sha1);
|
||||
if (fsck_sha1(sha1))
|
||||
errors_found |= ERROR_OBJECT;
|
||||
free(entry);
|
||||
}
|
||||
sha1_list.nr = 0;
|
||||
|
@ -69,7 +69,7 @@ test_expect_success 'object with bad sha1' '
|
||||
git update-ref refs/heads/bogus $cmt &&
|
||||
test_when_finished "git update-ref -d refs/heads/bogus" &&
|
||||
|
||||
test_might_fail git fsck 2>out &&
|
||||
test_must_fail git fsck 2>out &&
|
||||
cat out &&
|
||||
grep "$sha.*corrupt" out
|
||||
'
|
||||
@ -101,7 +101,7 @@ test_expect_success 'email with embedded > is not okay' '
|
||||
test_when_finished "remove_object $new" &&
|
||||
git update-ref refs/heads/bogus "$new" &&
|
||||
test_when_finished "git update-ref -d refs/heads/bogus" &&
|
||||
git fsck 2>out &&
|
||||
test_must_fail git fsck 2>out &&
|
||||
cat out &&
|
||||
grep "error in commit $new" out
|
||||
'
|
||||
@ -113,7 +113,7 @@ test_expect_success 'missing < email delimiter is reported nicely' '
|
||||
test_when_finished "remove_object $new" &&
|
||||
git update-ref refs/heads/bogus "$new" &&
|
||||
test_when_finished "git update-ref -d refs/heads/bogus" &&
|
||||
git fsck 2>out &&
|
||||
test_must_fail git fsck 2>out &&
|
||||
cat out &&
|
||||
grep "error in commit $new.* - bad name" out
|
||||
'
|
||||
@ -125,7 +125,7 @@ test_expect_success 'missing email is reported nicely' '
|
||||
test_when_finished "remove_object $new" &&
|
||||
git update-ref refs/heads/bogus "$new" &&
|
||||
test_when_finished "git update-ref -d refs/heads/bogus" &&
|
||||
git fsck 2>out &&
|
||||
test_must_fail git fsck 2>out &&
|
||||
cat out &&
|
||||
grep "error in commit $new.* - missing email" out
|
||||
'
|
||||
@ -137,7 +137,7 @@ test_expect_success '> in name is reported' '
|
||||
test_when_finished "remove_object $new" &&
|
||||
git update-ref refs/heads/bogus "$new" &&
|
||||
test_when_finished "git update-ref -d refs/heads/bogus" &&
|
||||
git fsck 2>out &&
|
||||
test_must_fail git fsck 2>out &&
|
||||
cat out &&
|
||||
grep "error in commit $new" out
|
||||
'
|
||||
@ -151,11 +151,31 @@ test_expect_success 'integer overflow in timestamps is reported' '
|
||||
test_when_finished "remove_object $new" &&
|
||||
git update-ref refs/heads/bogus "$new" &&
|
||||
test_when_finished "git update-ref -d refs/heads/bogus" &&
|
||||
git fsck 2>out &&
|
||||
test_must_fail git fsck 2>out &&
|
||||
cat out &&
|
||||
grep "error in commit $new.*integer overflow" out
|
||||
'
|
||||
|
||||
test_expect_success 'malformatted tree object' '
|
||||
test_when_finished "git update-ref -d refs/tags/wrong" &&
|
||||
test_when_finished "remove_object \$T" &&
|
||||
T=$(
|
||||
GIT_INDEX_FILE=test-index &&
|
||||
export GIT_INDEX_FILE &&
|
||||
rm -f test-index &&
|
||||
>x &&
|
||||
git add x &&
|
||||
T=$(git write-tree) &&
|
||||
(
|
||||
git cat-file tree $T &&
|
||||
git cat-file tree $T
|
||||
) |
|
||||
git hash-object -w -t tree --stdin
|
||||
) &&
|
||||
test_must_fail git fsck 2>out &&
|
||||
grep "error in tree .*contains duplicate file entries" out
|
||||
'
|
||||
|
||||
test_expect_success 'tag pointing to nonexistent' '
|
||||
cat >invalid-tag <<-\EOF &&
|
||||
object ffffffffffffffffffffffffffffffffffffffff
|
||||
|
@ -14,7 +14,7 @@ test_expect_success 'setup' '
|
||||
'
|
||||
|
||||
test_expect_success 'fsck notices broken commit' '
|
||||
git fsck 2>actual &&
|
||||
test_must_fail git fsck 2>actual &&
|
||||
test_i18ngrep invalid.author actual
|
||||
'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user