summaryrefslogtreecommitdiff
path: root/t/t5615-alternate-env.sh
blob: 83513e46a3556baa014c76f613a4da5504b8b548 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/sh

test_description='handling of alternates in environment variables'

TEST_PASSES_SANITIZE_LEAK=true
. ./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