Merge branch 'jk/alt-odb-cleanup'
Fix a corner-case regression in a topic that graduated during the v2.11 cycle. * jk/alt-odb-cleanup: alternates: re-allow relative paths from environmentmaint
						commit
						0538b84027
					
				|  | @ -296,7 +296,7 @@ static int link_alt_odb_entry(const char *entry, const char *relative_base, | ||||||
| 	} | 	} | ||||||
| 	strbuf_addstr(&pathbuf, entry); | 	strbuf_addstr(&pathbuf, entry); | ||||||
|  |  | ||||||
| 	if (strbuf_normalize_path(&pathbuf) < 0) { | 	if (strbuf_normalize_path(&pathbuf) < 0 && relative_base) { | ||||||
| 		error("unable to normalize alternate object path: %s", | 		error("unable to normalize alternate object path: %s", | ||||||
| 		      pathbuf.buf); | 		      pathbuf.buf); | ||||||
| 		strbuf_release(&pathbuf); | 		strbuf_release(&pathbuf); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,71 @@ | ||||||
|  | #!/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" >&3 && | ||||||
|  | 		echo "$obj $expect" >&4 | ||||||
|  | 	done 3>input 4>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 | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_done | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano