Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
test_description='check quarantine of objects during push'
 | 
						|
. ./test-lib.sh
 | 
						|
 | 
						|
test_expect_success 'create picky dest repo' '
 | 
						|
	git init --bare dest.git &&
 | 
						|
	write_script dest.git/hooks/pre-receive <<-\EOF
 | 
						|
	while read old new ref; do
 | 
						|
		test "$(git log -1 --format=%s $new)" = reject && exit 1
 | 
						|
	done
 | 
						|
	exit 0
 | 
						|
	EOF
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'accepted objects work' '
 | 
						|
	test_commit ok &&
 | 
						|
	git push dest.git HEAD &&
 | 
						|
	commit=$(git rev-parse HEAD) &&
 | 
						|
	git --git-dir=dest.git cat-file commit $commit
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'rejected objects are not installed' '
 | 
						|
	test_commit reject &&
 | 
						|
	commit=$(git rev-parse HEAD) &&
 | 
						|
	test_must_fail git push dest.git reject &&
 | 
						|
	test_must_fail git --git-dir=dest.git cat-file commit $commit
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'rejected objects are removed' '
 | 
						|
	echo "incoming-*" >expect &&
 | 
						|
	(cd dest.git/objects && echo incoming-*) >actual &&
 | 
						|
	test_cmp expect actual
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'push to repo path with path separator (colon)' '
 | 
						|
	# The interesting failure case here is when the
 | 
						|
	# receiving end cannot access its original object directory,
 | 
						|
	# so make it likely for us to generate a delta by having
 | 
						|
	# a non-trivial file with multiple versions.
 | 
						|
 | 
						|
	test-tool genrandom foo 4096 >file.bin &&
 | 
						|
	git add file.bin &&
 | 
						|
	git commit -m bin &&
 | 
						|
 | 
						|
	if test_have_prereq MINGW
 | 
						|
	then
 | 
						|
		pathsep=";"
 | 
						|
	else
 | 
						|
		pathsep=":"
 | 
						|
	fi &&
 | 
						|
	git clone --bare . "xxx${pathsep}yyy.git" &&
 | 
						|
 | 
						|
	echo change >>file.bin &&
 | 
						|
	git commit -am change &&
 | 
						|
	# Note that we have to use the full path here, or it gets confused
 | 
						|
	# with the ssh host:path syntax.
 | 
						|
	git push "$(pwd)/xxx${pathsep}yyy.git" HEAD
 | 
						|
'
 | 
						|
 | 
						|
test_expect_success 'updating a ref from quarantine is forbidden' '
 | 
						|
	git init --bare update.git &&
 | 
						|
	write_script update.git/hooks/pre-receive <<-\EOF &&
 | 
						|
	read old new refname
 | 
						|
	git update-ref refs/heads/unrelated $new
 | 
						|
	exit 1
 | 
						|
	EOF
 | 
						|
	test_must_fail git push update.git HEAD &&
 | 
						|
	git -C update.git fsck
 | 
						|
'
 | 
						|
 | 
						|
test_done
 |