зеркало из https://github.com/microsoft/git.git
verify_packfile(): check as many object as possible in a pack
verify_packfile() checks for whole pack integerity first, then each object individually. Once we get past whole pack check, we can identify all objects in the pack. If there's an error with one object, we should continue to check the next objects to salvage as many objects as possible instead of stopping the process. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
a3ed7552d6
Коммит
473935188c
|
@ -113,18 +113,13 @@ static int verify_packfile(struct packed_git *p,
|
|||
p->pack_name, (uintmax_t)offset);
|
||||
}
|
||||
data = unpack_entry(p, entries[i].offset, &type, &size);
|
||||
if (!data) {
|
||||
if (!data)
|
||||
err = error("cannot unpack %s from %s at offset %"PRIuMAX"",
|
||||
sha1_to_hex(entries[i].sha1), p->pack_name,
|
||||
(uintmax_t)entries[i].offset);
|
||||
break;
|
||||
}
|
||||
if (check_sha1_signature(entries[i].sha1, data, size, typename(type))) {
|
||||
else if (check_sha1_signature(entries[i].sha1, data, size, typename(type)))
|
||||
err = error("packed %s from %s is corrupt",
|
||||
sha1_to_hex(entries[i].sha1), p->pack_name);
|
||||
free(data);
|
||||
break;
|
||||
}
|
||||
free(data);
|
||||
}
|
||||
free(entries);
|
||||
|
|
Загрузка…
Ссылка в новой задаче