author | Junio C Hamano <gitster@pobox.com> | |
Thu, 17 Nov 2011 06:04:03 +0000 (22:04 -0800) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Thu, 17 Nov 2011 06:06:08 +0000 (22:06 -0800) | ||
commit | f63c79dbc8c5670533557d311ed0e81fcfc9fe3a | |
tree | 23bbcdba48b0eb9efa8212c47ffff5bfb041f42f | tree | snapshot |
parent | 632052641517de1a965c1f045b97d2eaa541b2e9 | commit | diff |
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>
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 | diff | blob | history |