Skip to content

Commit b2ef3d9

Browse files
peffgitster
authored andcommitted
test index-pack on packs with recoverable delta cycles
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 <[email protected]> Acked-by: Nicolas Pitre <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 3b910d0 commit b2ef3d9

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

t/t5309-pack-delta-cycles.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,22 @@ test_expect_success 'index-pack detects REF_DELTA cycles' '
5656
test_must_fail git index-pack --fix-thin --stdin <cycle.pack
5757
'
5858

59+
test_expect_failure 'failover to an object in another pack' '
60+
clear_packs &&
61+
git index-pack --stdin <ab.pack &&
62+
git index-pack --stdin --fix-thin <cycle.pack
63+
'
64+
65+
test_expect_failure 'failover to a duplicate object in the same pack' '
66+
clear_packs &&
67+
{
68+
pack_header 3 &&
69+
pack_obj $A $B &&
70+
pack_obj $B $A &&
71+
pack_obj $A
72+
} >recoverable.pack &&
73+
pack_trailer recoverable.pack &&
74+
git index-pack --fix-thin --stdin <recoverable.pack
75+
'
76+
5977
test_done

0 commit comments

Comments
 (0)