Skip to content

Commit

Permalink
test index-pack on packs with recoverable delta cycles
Browse files Browse the repository at this point in the history
The previous commit added tests to show that index-pack
correctly bails in unrecoverable situations. There are some
situations where the data could be recovered, but it is not
currently:

  1. If we can break the cycle using an object from another
     pack via --fix-thin.

  2. If we can break the cycle using a duplicate of one of
     the objects found in the same pack.

Note that neither of these is particularly high priority; a
delta cycle within a pack should never occur, and we have no
record of even a buggy git implementation creating such a
pack.

However, it's worth adding these tests for two reasons. One,
to document that we do not currently handle the situation,
even though it is possible. And two, to exercise the code
that runs in this situation; even though it fails, by
running it we can confirm that index-pack detects the
situation and aborts, and does not misbehave (e.g., by
following the cycle in an infinite loop).

In both cases, we hit an assert that aborts index-pack.

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Aug 25, 2013
1 parent 3b910d0 commit b2ef3d9
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions t/t5309-pack-delta-cycles.sh
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,22 @@ test_expect_success 'index-pack detects REF_DELTA cycles' '
test_must_fail git index-pack --fix-thin --stdin <cycle.pack
'

test_expect_failure 'failover to an object in another pack' '
clear_packs &&
git index-pack --stdin <ab.pack &&
git index-pack --stdin --fix-thin <cycle.pack
'

test_expect_failure 'failover to a duplicate object in the same pack' '
clear_packs &&
{
pack_header 3 &&
pack_obj $A $B &&
pack_obj $B $A &&
pack_obj $A
} >recoverable.pack &&
pack_trailer recoverable.pack &&
git index-pack --fix-thin --stdin <recoverable.pack
'

test_done

0 comments on commit b2ef3d9

Please sign in to comment.