pack-object: tolerate broken packs that have duplicated objects
commitf63c79dbc8c5670533557d311ed0e81fcfc9fe3a
authorJunio C Hamano <gitster@pobox.com>
Thu, 17 Nov 2011 06:04:03 +0000 (16 22:04 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 17 Nov 2011 06:06:08 +0000 (16 22:06 -0800)
tree23bbcdba48b0eb9efa8212c47ffff5bfb041f42f
parent632052641517de1a965c1f045b97d2eaa541b2e9
pack-object: tolerate broken packs that have duplicated objects

When --reuse-delta is in effect (which is the default), and an existing
pack in the repository has the same object registered twice (e.g. one copy
in a non-delta format and the other copy in a delta against some other
object), an attempt to repack the repository can result in a cyclic delta
dependency, causing write_one() function to infinitely recurse into
itself.

Detect such a case and break the loopy dependency by writing out an object
that is involved in such a loop in the non-delta format.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pack-objects.c