1#!/bin/sh
2
3test_description='test GIT_CEILING_DIRECTORIES'
4
5TEST_PASSES_SANITIZE_LEAK=true
6. ./test-lib.sh
7
8test_prefix() {
9	test_expect_success "$1" \
10	"test '$2' = \"\$(git rev-parse --show-prefix)\""
11}
12
13test_fail() {
14	test_expect_success "$1: prefix" '
15		test_expect_code 128 git rev-parse --show-prefix
16	'
17}
18
19TRASH_ROOT="$PWD"
20ROOT_PARENT=$(dirname "$TRASH_ROOT")
21
22
23unset GIT_CEILING_DIRECTORIES
24test_prefix no_ceil ""
25
26export GIT_CEILING_DIRECTORIES
27
28GIT_CEILING_DIRECTORIES=""
29test_prefix ceil_empty ""
30
31GIT_CEILING_DIRECTORIES="$ROOT_PARENT"
32test_prefix ceil_at_parent ""
33
34GIT_CEILING_DIRECTORIES="$ROOT_PARENT/"
35test_prefix ceil_at_parent_slash ""
36
37GIT_CEILING_DIRECTORIES="$TRASH_ROOT"
38test_prefix ceil_at_trash ""
39
40GIT_CEILING_DIRECTORIES="$TRASH_ROOT/"
41test_prefix ceil_at_trash_slash ""
42
43GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub"
44test_prefix ceil_at_sub ""
45
46GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/"
47test_prefix ceil_at_sub_slash ""
48
49if test_have_prereq SYMLINKS
50then
51	ln -s sub top
52fi
53
54mkdir -p sub/dir || exit 1
55cd sub/dir || exit 1
56
57unset GIT_CEILING_DIRECTORIES
58test_prefix subdir_no_ceil "sub/dir/"
59
60export GIT_CEILING_DIRECTORIES
61
62GIT_CEILING_DIRECTORIES=""
63test_prefix subdir_ceil_empty "sub/dir/"
64
65GIT_CEILING_DIRECTORIES="$TRASH_ROOT"
66test_fail subdir_ceil_at_trash
67
68GIT_CEILING_DIRECTORIES="$TRASH_ROOT/"
69test_fail subdir_ceil_at_trash_slash
70
71GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub"
72test_fail subdir_ceil_at_sub
73
74GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/"
75test_fail subdir_ceil_at_sub_slash
76
77if test_have_prereq SYMLINKS
78then
79	GIT_CEILING_DIRECTORIES="$TRASH_ROOT/top"
80	test_fail subdir_ceil_at_top
81	GIT_CEILING_DIRECTORIES="$TRASH_ROOT/top/"
82	test_fail subdir_ceil_at_top_slash
83
84	GIT_CEILING_DIRECTORIES=":$TRASH_ROOT/top"
85	test_prefix subdir_ceil_at_top_no_resolve "sub/dir/"
86	GIT_CEILING_DIRECTORIES=":$TRASH_ROOT/top/"
87	test_prefix subdir_ceil_at_top_slash_no_resolve "sub/dir/"
88fi
89
90GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/dir"
91test_prefix subdir_ceil_at_subdir "sub/dir/"
92
93GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/dir/"
94test_prefix subdir_ceil_at_subdir_slash "sub/dir/"
95
96
97GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su"
98test_prefix subdir_ceil_at_su "sub/dir/"
99
100GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su/"
101test_prefix subdir_ceil_at_su_slash "sub/dir/"
102
103GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/di"
104test_prefix subdir_ceil_at_sub_di "sub/dir/"
105
106GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub/di"
107test_prefix subdir_ceil_at_sub_di_slash "sub/dir/"
108
109GIT_CEILING_DIRECTORIES="$TRASH_ROOT/subdi"
110test_prefix subdir_ceil_at_subdi "sub/dir/"
111
112GIT_CEILING_DIRECTORIES="$TRASH_ROOT/subdi"
113test_prefix subdir_ceil_at_subdi_slash "sub/dir/"
114
115
116GIT_CEILING_DIRECTORIES="/foo:$TRASH_ROOT/sub"
117test_fail second_of_two
118
119GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub:/bar"
120test_fail first_of_two
121
122GIT_CEILING_DIRECTORIES="/foo:$TRASH_ROOT/sub:/bar"
123test_fail second_of_three
124
125
126GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sub"
127GIT_DIR=../../.git
128export GIT_DIR
129test_prefix git_dir_specified ""
130unset GIT_DIR
131
132
133cd ../.. || exit 1
134mkdir -p s/d || exit 1
135cd s/d || exit 1
136
137unset GIT_CEILING_DIRECTORIES
138test_prefix sd_no_ceil "s/d/"
139
140export GIT_CEILING_DIRECTORIES
141
142GIT_CEILING_DIRECTORIES=""
143test_prefix sd_ceil_empty "s/d/"
144
145GIT_CEILING_DIRECTORIES="$TRASH_ROOT"
146test_fail sd_ceil_at_trash
147
148GIT_CEILING_DIRECTORIES="$TRASH_ROOT/"
149test_fail sd_ceil_at_trash_slash
150
151GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s"
152test_fail sd_ceil_at_s
153
154GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/"
155test_fail sd_ceil_at_s_slash
156
157GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/d"
158test_prefix sd_ceil_at_sd "s/d/"
159
160GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/d/"
161test_prefix sd_ceil_at_sd_slash "s/d/"
162
163
164GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su"
165test_prefix sd_ceil_at_su "s/d/"
166
167GIT_CEILING_DIRECTORIES="$TRASH_ROOT/su/"
168test_prefix sd_ceil_at_su_slash "s/d/"
169
170GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/di"
171test_prefix sd_ceil_at_s_di "s/d/"
172
173GIT_CEILING_DIRECTORIES="$TRASH_ROOT/s/di"
174test_prefix sd_ceil_at_s_di_slash "s/d/"
175
176GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sdi"
177test_prefix sd_ceil_at_sdi "s/d/"
178
179GIT_CEILING_DIRECTORIES="$TRASH_ROOT/sdi"
180test_prefix sd_ceil_at_sdi_slash "s/d/"
181
182
183test_done
184