#!/bin/sh test_description='test index-pack handling of delta cycles in packfiles' . ./test-lib.sh . "$TEST_DIRECTORY"/lib-pack.sh if ! test_have_prereq SHA1 then skip_all='not using SHA-1 for objects' test_done fi # Two similar-ish objects that we have computed deltas between. A=01d7713666f4de822776c7622c10f1b07de280dc B=e68fe8129b546b101aee9510c5328e7f21ca1d18 # double-check our hand-constucted packs test_expect_success 'index-pack works with a single delta (A->B)' ' clear_packs && { pack_header 2 && pack_obj $A $B && pack_obj $B } >ab.pack && pack_trailer ab.pack && git index-pack --stdin <ab.pack && git cat-file -t $A && git cat-file -t $B ' test_expect_success 'index-pack works with a single delta (B->A)' ' clear_packs && { pack_header 2 && pack_obj $A && pack_obj $B $A } >ba.pack && pack_trailer ba.pack && git index-pack --stdin <ba.pack && git cat-file -t $A && git cat-file -t $B ' test_expect_success 'index-pack detects missing base objects' ' clear_packs && { pack_header 1 && pack_obj $A $B } >missing.pack && pack_trailer missing.pack && test_must_fail git index-pack --fix-thin --stdin <missing.pack ' test_expect_success 'index-pack detects REF_DELTA cycles' ' clear_packs && { pack_header 2 && pack_obj $A $B && pack_obj $B $A } >cycle.pack && pack_trailer cycle.pack && 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