fsck: avoid reading every object twice
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Mon, 7 Nov 2011 02:59:25 +0000 (09:59 +0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 7 Nov 2011 04:31:28 +0000 (20:31 -0800)
commitc9486eb04dd99fc00df3e68f9b908f9ad7ff9728
tree1604f80dc18373e70f69c3b0578c74846a0d623d
parent473935188cc9b0363b30553f23d816231a66cb44
fsck: avoid reading every object twice

During verify_pack() all objects are read for SHA-1 check. Then
fsck_sha1() is called on every object, which read the object again
(fsck_sha1 -> parse_object -> read_sha1_file).

Avoid reading an object twice, do fsck_sha1 while we have an object
uncompressed data in verify_pack.

On git.git, with this patch I got:

$ /usr/bin/time ./git fsck >/dev/null
98.97user 0.90system 1:40.01elapsed 99%CPU (0avgtext+0avgdata 616624maxresident)k
0inputs+0outputs (0major+194186minor)pagefaults 0swaps

Without it:

$ /usr/bin/time ./git fsck >/dev/null
231.23user 2.35system 3:53.82elapsed 99%CPU (0avgtext+0avgdata 636688maxresident)k
0inputs+0outputs (0major+461629minor)pagefaults 0swaps

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fsck.c
pack-check.c
pack.h