fsck: parse loose object paths directly
commitc68b489e56431cf27f7719913ab09ddc62f95912
authorJeff King <peff@peff.net>
Fri, 13 Jan 2017 17:59:44 +0000 (13 12:59 -0500)
committerJunio C Hamano <gitster@pobox.com>
Sun, 15 Jan 2017 23:59:03 +0000 (15 15:59 -0800)
tree248ed3389b8d54f8ab9e6879ee5c82098e186a5f
parentf6371f9210418f1beabc85b097e2a3470aeeb54d
fsck: parse loose object paths directly

When we iterate over the list of loose objects to check, we
get the actual path of each object. But we then throw it
away and pass just the sha1 to fsck_sha1(), which will do a
fresh lookup. Usually it would find the same object, but it
may not if an object exists both as a loose and a packed
object. We may end up checking the packed object twice, and
never look at the loose one.

In practice this isn't too terrible, because if fsck doesn't
complain, it means you have at least one good copy. But
since the point of fsck is to look for corruption, we should
be thorough.

The new read_loose_object() interface can help us get the
data from disk, and then we replace parse_object() with
parse_object_buffer(). As a bonus, our error messages now
mention the path to a corrupted object, which should make it
easier to track down errors when they do happen.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fsck.c
t/t1450-fsck.sh