83 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/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
 |