90 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| test_description='handling of alternates in environment variables'
 | |
| . ./test-lib.sh
 | |
| 
 | |
| check_obj () {
 | |
| 	alt=$1; shift
 | |
| 	while read obj expect
 | |
| 	do
 | |
| 		echo "$obj" >&5 &&
 | |
| 		echo "$obj $expect" >&6
 | |
| 	done 5>input 6>expect &&
 | |
| 	GIT_ALTERNATE_OBJECT_DIRECTORIES=$alt \
 | |
| 		git "$@" cat-file --batch-check='%(objectname) %(objecttype)' \
 | |
| 		<input >actual &&
 | |
| 	test_cmp expect actual
 | |
| }
 | |
| 
 | |
| test_expect_success 'create alternate repositories' '
 | |
| 	git init --bare one.git &&
 | |
| 	one=$(echo one | git -C one.git hash-object -w --stdin) &&
 | |
| 	git init --bare two.git &&
 | |
| 	two=$(echo two | git -C two.git hash-object -w --stdin)
 | |
| '
 | |
| 
 | |
| test_expect_success 'objects inaccessible without alternates' '
 | |
| 	check_obj "" <<-EOF
 | |
| 	$one missing
 | |
| 	$two missing
 | |
| 	EOF
 | |
| '
 | |
| 
 | |
| test_expect_success 'access alternate via absolute path' '
 | |
| 	check_obj "$PWD/one.git/objects" <<-EOF
 | |
| 	$one blob
 | |
| 	$two missing
 | |
| 	EOF
 | |
| '
 | |
| 
 | |
| test_expect_success 'access multiple alternates' '
 | |
| 	check_obj "$PWD/one.git/objects:$PWD/two.git/objects" <<-EOF
 | |
| 	$one blob
 | |
| 	$two blob
 | |
| 	EOF
 | |
| '
 | |
| 
 | |
| # bare paths are relative from $GIT_DIR
 | |
| test_expect_success 'access alternate via relative path (bare)' '
 | |
| 	git init --bare bare.git &&
 | |
| 	check_obj "../one.git/objects" -C bare.git <<-EOF
 | |
| 	$one blob
 | |
| 	EOF
 | |
| '
 | |
| 
 | |
| # non-bare paths are relative to top of worktree
 | |
| test_expect_success 'access alternate via relative path (worktree)' '
 | |
| 	git init worktree &&
 | |
| 	check_obj "../one.git/objects" -C worktree <<-EOF
 | |
| 	$one blob
 | |
| 	EOF
 | |
| '
 | |
| 
 | |
| # path is computed after moving to top-level of worktree
 | |
| test_expect_success 'access alternate via relative path (subdir)' '
 | |
| 	mkdir subdir &&
 | |
| 	check_obj "one.git/objects" -C subdir <<-EOF
 | |
| 	$one blob
 | |
| 	EOF
 | |
| '
 | |
| 
 | |
| # set variables outside test to avoid quote insanity; the \057 is '/',
 | |
| # which doesn't need quoting, but just confirms that de-quoting
 | |
| # is working.
 | |
| quoted='"one.git\057objects"'
 | |
| unquoted='two.git/objects'
 | |
| test_expect_success 'mix of quoted and unquoted alternates' '
 | |
| 	check_obj "$quoted:$unquoted" <<-EOF
 | |
| 	$one blob
 | |
| 	$two blob
 | |
| 	EOF
 | |
| '
 | |
| 
 | |
| test_expect_success !MINGW 'broken quoting falls back to interpreting raw' '
 | |
| 	mv one.git \"one.git &&
 | |
| 	check_obj \"one.git/objects <<-EOF
 | |
| 	$one blob
 | |
| 	EOF
 | |
| '
 | |
| 
 | |
| test_done
 |