]>
Commit | Line | Data |
---|---|---|
3719b2fe NTND |
1 | #!/bin/sh |
2 | ||
3 | test_description='Test Git when git repository is located at root | |
4 | ||
5 | This test requires write access in root. Do not bother if you do not | |
6 | have a throwaway chroot or VM. | |
7 | ||
8 | Script t1509/prepare-chroot.sh may help you setup chroot, then you | |
9 | can chroot in and execute this test from there. | |
10 | ' | |
11 | ||
12 | . ./test-lib.sh | |
13 | ||
14 | test_cmp_val() { | |
15 | echo "$1" > expected | |
16 | echo "$2" > result | |
17 | test_cmp expected result | |
18 | } | |
19 | ||
20 | test_vars() { | |
21 | test_expect_success "$1: gitdir" ' | |
22 | test_cmp_val "'"$2"'" "$(git rev-parse --git-dir)" | |
23 | ' | |
24 | ||
25 | test_expect_success "$1: worktree" ' | |
26 | test_cmp_val "'"$3"'" "$(git rev-parse --show-toplevel)" | |
27 | ' | |
28 | ||
29 | test_expect_success "$1: prefix" ' | |
30 | test_cmp_val "'"$4"'" "$(git rev-parse --show-prefix)" | |
31 | ' | |
32 | } | |
33 | ||
34 | test_foobar_root() { | |
35 | test_expect_success 'add relative' ' | |
36 | test -z "$(cd / && git ls-files)" && | |
37 | git add foo/foome && | |
38 | git add foo/bar/barme && | |
39 | git add me && | |
40 | ( cd / && git ls-files --stage ) > result && | |
41 | test_cmp /ls.expected result && | |
42 | rm "$(git rev-parse --git-dir)/index" | |
43 | ' | |
44 | ||
45 | test_expect_success 'add absolute' ' | |
46 | test -z "$(cd / && git ls-files)" && | |
47 | git add /foo/foome && | |
48 | git add /foo/bar/barme && | |
49 | git add /me && | |
50 | ( cd / && git ls-files --stage ) > result && | |
51 | test_cmp /ls.expected result && | |
52 | rm "$(git rev-parse --git-dir)/index" | |
53 | ' | |
54 | ||
55 | } | |
56 | ||
57 | test_foobar_foo() { | |
58 | test_expect_success 'add relative' ' | |
59 | test -z "$(cd / && git ls-files)" && | |
60 | git add foome && | |
61 | git add bar/barme && | |
62 | git add ../me && | |
63 | ( cd / && git ls-files --stage ) > result && | |
64 | test_cmp /ls.expected result && | |
65 | rm "$(git rev-parse --git-dir)/index" | |
66 | ' | |
67 | ||
68 | test_expect_success 'add absolute' ' | |
69 | test -z "$(cd / && git ls-files)" && | |
70 | git add /foo/foome && | |
71 | git add /foo/bar/barme && | |
72 | git add /me && | |
73 | ( cd / && git ls-files --stage ) > result && | |
74 | test_cmp /ls.expected result && | |
75 | rm "$(git rev-parse --git-dir)/index" | |
76 | ' | |
77 | } | |
78 | ||
79 | test_foobar_foobar() { | |
80 | test_expect_success 'add relative' ' | |
81 | test -z "$(cd / && git ls-files)" && | |
82 | git add ../foome && | |
83 | git add barme && | |
84 | git add ../../me && | |
85 | ( cd / && git ls-files --stage ) > result && | |
86 | test_cmp /ls.expected result && | |
87 | rm "$(git rev-parse --git-dir)/index" | |
88 | ' | |
89 | ||
90 | test_expect_success 'add absolute' ' | |
91 | test -z "$(cd / && git ls-files)" && | |
92 | git add /foo/foome && | |
93 | git add /foo/bar/barme && | |
94 | git add /me && | |
95 | ( cd / && git ls-files --stage ) > result && | |
96 | test_cmp /ls.expected result && | |
97 | rm "$(git rev-parse --git-dir)/index" | |
98 | ' | |
99 | } | |
100 | ||
eae69530 JH |
101 | if ! test -w / |
102 | then | |
103 | skip_all="Test requiring writable / skipped. Read this test if you want to run it" | |
104 | test_done | |
105 | fi | |
106 | ||
107 | if test -e /refs || test -e /objects || test -e /info || test -e /hooks || | |
108 | test -e /.git || test -e /foo || test -e /me | |
109 | then | |
110 | skip_all="Skip test that clobbers existing files in /" | |
3719b2fe NTND |
111 | test_done |
112 | fi | |
113 | ||
114 | if [ "$IKNOWWHATIAMDOING" != "YES" ]; then | |
fadb5156 | 115 | skip_all="You must set env var IKNOWWHATIAMDOING=YES in order to run this test" |
3719b2fe NTND |
116 | test_done |
117 | fi | |
118 | ||
eae69530 JH |
119 | if ! test_have_prereq NOT_ROOT |
120 | then | |
121 | skip_all="No you can't run this as root" | |
3719b2fe NTND |
122 | test_done |
123 | fi | |
124 | ||
125 | ONE_SHA1=d00491fd7e5bb6fa28c517a0bb32b8b506539d4d | |
126 | ||
127 | test_expect_success 'setup' ' | |
24ca45f6 | 128 | rm -rf /foo && |
3719b2fe NTND |
129 | mkdir /foo && |
130 | mkdir /foo/bar && | |
131 | echo 1 > /foo/foome && | |
132 | echo 1 > /foo/bar/barme && | |
133 | echo 1 > /me | |
134 | ' | |
135 | ||
136 | say "GIT_DIR absolute, GIT_WORK_TREE set" | |
137 | ||
138 | test_expect_success 'go to /' 'cd /' | |
139 | ||
140 | cat >ls.expected <<EOF | |
141 | 100644 $ONE_SHA1 0 foo/bar/barme | |
142 | 100644 $ONE_SHA1 0 foo/foome | |
143 | 100644 $ONE_SHA1 0 me | |
144 | EOF | |
145 | ||
69ae92bd JH |
146 | GIT_DIR="$TRASH_DIRECTORY/.git" && export GIT_DIR |
147 | GIT_WORK_TREE=/ && export GIT_WORK_TREE | |
3719b2fe NTND |
148 | |
149 | test_vars 'abs gitdir, root' "$GIT_DIR" "/" "" | |
150 | test_foobar_root | |
151 | ||
152 | test_expect_success 'go to /foo' 'cd /foo' | |
153 | ||
154 | test_vars 'abs gitdir, foo' "$GIT_DIR" "/" "foo/" | |
155 | test_foobar_foo | |
156 | ||
157 | test_expect_success 'go to /foo/bar' 'cd /foo/bar' | |
158 | ||
159 | test_vars 'abs gitdir, foo/bar' "$GIT_DIR" "/" "foo/bar/" | |
160 | test_foobar_foobar | |
161 | ||
162 | say "GIT_DIR relative, GIT_WORK_TREE set" | |
163 | ||
164 | test_expect_success 'go to /' 'cd /' | |
165 | ||
69ae92bd JH |
166 | GIT_DIR="$(echo $TRASH_DIRECTORY|sed 's,^/,,')/.git" && export GIT_DIR |
167 | GIT_WORK_TREE=/ && export GIT_WORK_TREE | |
3719b2fe NTND |
168 | |
169 | test_vars 'rel gitdir, root' "$GIT_DIR" "/" "" | |
170 | test_foobar_root | |
171 | ||
172 | test_expect_success 'go to /foo' 'cd /foo' | |
173 | ||
69ae92bd JH |
174 | GIT_DIR="../$TRASH_DIRECTORY/.git" && export GIT_DIR |
175 | GIT_WORK_TREE=/ && export GIT_WORK_TREE | |
3719b2fe NTND |
176 | |
177 | test_vars 'rel gitdir, foo' "$TRASH_DIRECTORY/.git" "/" "foo/" | |
178 | test_foobar_foo | |
179 | ||
180 | test_expect_success 'go to /foo/bar' 'cd /foo/bar' | |
181 | ||
69ae92bd JH |
182 | GIT_DIR="../../$TRASH_DIRECTORY/.git" && export GIT_DIR |
183 | GIT_WORK_TREE=/ && export GIT_WORK_TREE | |
3719b2fe NTND |
184 | |
185 | test_vars 'rel gitdir, foo/bar' "$TRASH_DIRECTORY/.git" "/" "foo/bar/" | |
186 | test_foobar_foobar | |
187 | ||
188 | say "GIT_DIR relative, GIT_WORK_TREE relative" | |
189 | ||
190 | test_expect_success 'go to /' 'cd /' | |
191 | ||
69ae92bd JH |
192 | GIT_DIR="$(echo $TRASH_DIRECTORY|sed 's,^/,,')/.git" && export GIT_DIR |
193 | GIT_WORK_TREE=. && export GIT_WORK_TREE | |
3719b2fe NTND |
194 | |
195 | test_vars 'rel gitdir, root' "$GIT_DIR" "/" "" | |
196 | test_foobar_root | |
197 | ||
198 | test_expect_success 'go to /' 'cd /foo' | |
199 | ||
69ae92bd JH |
200 | GIT_DIR="../$TRASH_DIRECTORY/.git" && export GIT_DIR |
201 | GIT_WORK_TREE=.. && export GIT_WORK_TREE | |
3719b2fe NTND |
202 | |
203 | test_vars 'rel gitdir, foo' "$TRASH_DIRECTORY/.git" "/" "foo/" | |
204 | test_foobar_foo | |
205 | ||
206 | test_expect_success 'go to /foo/bar' 'cd /foo/bar' | |
207 | ||
69ae92bd JH |
208 | GIT_DIR="../../$TRASH_DIRECTORY/.git" && export GIT_DIR |
209 | GIT_WORK_TREE=../.. && export GIT_WORK_TREE | |
3719b2fe NTND |
210 | |
211 | test_vars 'rel gitdir, foo/bar' "$TRASH_DIRECTORY/.git" "/" "foo/bar/" | |
212 | test_foobar_foobar | |
213 | ||
214 | say ".git at root" | |
215 | ||
216 | unset GIT_DIR | |
217 | unset GIT_WORK_TREE | |
218 | ||
219 | test_expect_success 'go to /' 'cd /' | |
220 | test_expect_success 'setup' ' | |
24ca45f6 | 221 | rm -rf /.git && |
3719b2fe NTND |
222 | echo "Initialized empty Git repository in /.git/" > expected && |
223 | git init > result && | |
27e29f85 | 224 | test_i18ncmp expected result |
3719b2fe NTND |
225 | ' |
226 | ||
227 | test_vars 'auto gitdir, root' ".git" "/" "" | |
228 | test_foobar_root | |
229 | ||
230 | test_expect_success 'go to /foo' 'cd /foo' | |
231 | test_vars 'auto gitdir, foo' "/.git" "/" "foo/" | |
232 | test_foobar_foo | |
233 | ||
234 | test_expect_success 'go to /foo/bar' 'cd /foo/bar' | |
235 | test_vars 'auto gitdir, foo/bar' "/.git" "/" "foo/bar/" | |
236 | test_foobar_foobar | |
237 | ||
238 | test_expect_success 'cleanup' 'rm -rf /.git' | |
239 | ||
240 | say "auto bare gitdir" | |
241 | ||
242 | # DESTROYYYYY!!!!! | |
243 | test_expect_success 'setup' ' | |
24ca45f6 | 244 | rm -rf /refs /objects /info /hooks && |
faacc5aa | 245 | rm -f /expected /ls.expected /me /result && |
3719b2fe NTND |
246 | cd / && |
247 | echo "Initialized empty Git repository in /" > expected && | |
248 | git init --bare > result && | |
27e29f85 | 249 | test_i18ncmp expected result |
3719b2fe NTND |
250 | ' |
251 | ||
252 | test_vars 'auto gitdir, root' "." "" "" | |
253 | ||
254 | test_expect_success 'go to /foo' 'cd /foo' | |
255 | ||
256 | test_vars 'auto gitdir, root' "/" "" "" | |
257 | ||
258 | test_done |