]> git.ipfire.org Git - thirdparty/git.git/blame - t/t7300-clean.sh
t4124 (apply --whitespace): use test_might_fail
[thirdparty/git.git] / t / t7300-clean.sh
CommitLineData
ec0e0f25
MS
1#!/bin/sh
2#
3# Copyright (c) 2007 Michael Spang
4#
5
47a528ad 6test_description='git clean basic tests'
ec0e0f25
MS
7
8. ./test-lib.sh
9
562ca192
JH
10git config clean.requireForce no
11
ec0e0f25
MS
12test_expect_success 'setup' '
13
14 mkdir -p src &&
15 touch src/part1.c Makefile &&
16 echo build >.gitignore &&
17 echo \*.o >>.gitignore &&
5be60078 18 git add . &&
47a528ad 19 git commit -m setup &&
ec0e0f25 20 touch src/part2.c README &&
5be60078 21 git add .
ec0e0f25
MS
22
23'
24
c28b3d6e
NTND
25test_expect_success 'git clean with skip-worktree .gitignore' '
26 git update-index --skip-worktree .gitignore &&
27 rm .gitignore &&
28 mkdir -p build docs &&
29 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
30 git clean &&
31 test -f Makefile &&
32 test -f README &&
33 test -f src/part1.c &&
34 test -f src/part2.c &&
35 test ! -f a.out &&
36 test ! -f src/part3.c &&
37 test -f docs/manual.txt &&
38 test -f obj.o &&
39 test -f build/lib.so &&
40 git update-index --no-skip-worktree .gitignore &&
41 git checkout .gitignore
42'
43
47a528ad 44test_expect_success 'git clean' '
ec0e0f25
MS
45
46 mkdir -p build docs &&
47 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
47a528ad 48 git clean &&
ec0e0f25
MS
49 test -f Makefile &&
50 test -f README &&
51 test -f src/part1.c &&
52 test -f src/part2.c &&
53 test ! -f a.out &&
54 test ! -f src/part3.c &&
55 test -f docs/manual.txt &&
56 test -f obj.o &&
57 test -f build/lib.so
58
59'
60
47a528ad 61test_expect_success 'git clean src/' '
ae3e76c2
SB
62
63 mkdir -p build docs &&
64 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
47a528ad 65 git clean src/ &&
ae3e76c2
SB
66 test -f Makefile &&
67 test -f README &&
68 test -f src/part1.c &&
69 test -f src/part2.c &&
70 test -f a.out &&
71 test ! -f src/part3.c &&
72 test -f docs/manual.txt &&
73 test -f obj.o &&
74 test -f build/lib.so
75
76'
77
47a528ad 78test_expect_success 'git clean src/ src/' '
ae3e76c2
SB
79
80 mkdir -p build docs &&
81 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
47a528ad 82 git clean src/ src/ &&
ae3e76c2
SB
83 test -f Makefile &&
84 test -f README &&
85 test -f src/part1.c &&
86 test -f src/part2.c &&
87 test -f a.out &&
88 test ! -f src/part3.c &&
89 test -f docs/manual.txt &&
90 test -f obj.o &&
91 test -f build/lib.so
92
93'
94
47a528ad 95test_expect_success 'git clean with prefix' '
ae3e76c2 96
2b6f0b0a
SB
97 mkdir -p build docs src/test &&
98 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so src/test/1.c &&
47a528ad 99 (cd src/ && git clean) &&
ae3e76c2
SB
100 test -f Makefile &&
101 test -f README &&
102 test -f src/part1.c &&
103 test -f src/part2.c &&
104 test -f a.out &&
105 test ! -f src/part3.c &&
2b6f0b0a 106 test -f src/test/1.c &&
ae3e76c2
SB
107 test -f docs/manual.txt &&
108 test -f obj.o &&
109 test -f build/lib.so
110
111'
5b7570cf 112
47a528ad 113test_expect_success 'git clean with relative prefix' '
5b7570cf
JH
114
115 mkdir -p build docs &&
116 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
117 would_clean=$(
118 cd docs &&
119 git clean -n ../src |
120 sed -n -e "s|^Would remove ||p"
121 ) &&
122 test "$would_clean" = ../src/part3.c || {
123 echo "OOps <$would_clean>"
124 false
125 }
126'
127
47a528ad 128test_expect_success 'git clean with absolute path' '
5b7570cf
JH
129
130 mkdir -p build docs &&
131 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
132 would_clean=$(
133 cd docs &&
f69e836f 134 git clean -n "$(pwd)/../src" |
5b7570cf
JH
135 sed -n -e "s|^Would remove ||p"
136 ) &&
137 test "$would_clean" = ../src/part3.c || {
138 echo "OOps <$would_clean>"
139 false
140 }
141'
142
47a528ad 143test_expect_success 'git clean with out of work tree relative path' '
5b7570cf
JH
144
145 mkdir -p build docs &&
146 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
147 (
148 cd docs &&
149 test_must_fail git clean -n ../..
150 )
151'
152
47a528ad 153test_expect_success 'git clean with out of work tree absolute path' '
5b7570cf
JH
154
155 mkdir -p build docs &&
156 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
157 dd=$(cd .. && pwd) &&
158 (
159 cd docs &&
160 test_must_fail git clean -n $dd
161 )
162'
163
47a528ad 164test_expect_success 'git clean -d with prefix and path' '
ae3e76c2
SB
165
166 mkdir -p build docs src/feature &&
167 touch a.out src/part3.c src/feature/file.c docs/manual.txt obj.o build/lib.so &&
47a528ad 168 (cd src/ && git clean -d feature/) &&
ae3e76c2
SB
169 test -f Makefile &&
170 test -f README &&
171 test -f src/part1.c &&
172 test -f src/part2.c &&
173 test -f a.out &&
174 test -f src/part3.c &&
175 test ! -f src/feature/file.c &&
176 test -f docs/manual.txt &&
177 test -f obj.o &&
178 test -f build/lib.so
179
180'
181
47a528ad 182test_expect_success 'git clean symbolic link' '
ae3e76c2
SB
183
184 mkdir -p build docs &&
185 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
2dec68cf 186 ln -s docs/manual.txt src/part4.c &&
47a528ad 187 git clean &&
ae3e76c2
SB
188 test -f Makefile &&
189 test -f README &&
190 test -f src/part1.c &&
191 test -f src/part2.c &&
192 test ! -f a.out &&
193 test ! -f src/part3.c &&
194 test ! -f src/part4.c &&
195 test -f docs/manual.txt &&
196 test -f obj.o &&
197 test -f build/lib.so
198
199'
200
47a528ad 201test_expect_success 'git clean with wildcard' '
d3357ab8
JK
202
203 touch a.clean b.clean other.c &&
47a528ad 204 git clean "*.clean" &&
d3357ab8
JK
205 test -f Makefile &&
206 test -f README &&
207 test -f src/part1.c &&
208 test -f src/part2.c &&
209 test ! -f a.clean &&
210 test ! -f b.clean &&
211 test -f other.c
212
213'
214
47a528ad 215test_expect_success 'git clean -n' '
ec0e0f25
MS
216
217 mkdir -p build docs &&
218 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
47a528ad 219 git clean -n &&
ec0e0f25
MS
220 test -f Makefile &&
221 test -f README &&
222 test -f src/part1.c &&
223 test -f src/part2.c &&
224 test -f a.out &&
225 test -f src/part3.c &&
226 test -f docs/manual.txt &&
227 test -f obj.o &&
228 test -f build/lib.so
229
230'
231
47a528ad 232test_expect_success 'git clean -d' '
ec0e0f25
MS
233
234 mkdir -p build docs &&
235 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
47a528ad 236 git clean -d &&
ec0e0f25
MS
237 test -f Makefile &&
238 test -f README &&
239 test -f src/part1.c &&
240 test -f src/part2.c &&
241 test ! -f a.out &&
242 test ! -f src/part3.c &&
243 test ! -d docs &&
244 test -f obj.o &&
245 test -f build/lib.so
246
247'
248
47a528ad 249test_expect_success 'git clean -d src/ examples/' '
ae3e76c2
SB
250
251 mkdir -p build docs examples &&
252 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so examples/1.c &&
47a528ad 253 git clean -d src/ examples/ &&
ae3e76c2
SB
254 test -f Makefile &&
255 test -f README &&
256 test -f src/part1.c &&
257 test -f src/part2.c &&
258 test -f a.out &&
259 test ! -f src/part3.c &&
260 test ! -f examples/1.c &&
261 test -f docs/manual.txt &&
262 test -f obj.o &&
263 test -f build/lib.so
264
265'
266
47a528ad 267test_expect_success 'git clean -x' '
ec0e0f25
MS
268
269 mkdir -p build docs &&
270 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
47a528ad 271 git clean -x &&
ec0e0f25
MS
272 test -f Makefile &&
273 test -f README &&
274 test -f src/part1.c &&
275 test -f src/part2.c &&
276 test ! -f a.out &&
277 test ! -f src/part3.c &&
278 test -f docs/manual.txt &&
279 test ! -f obj.o &&
280 test -f build/lib.so
281
282'
283
47a528ad 284test_expect_success 'git clean -d -x' '
ec0e0f25
MS
285
286 mkdir -p build docs &&
287 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
47a528ad 288 git clean -d -x &&
ec0e0f25
MS
289 test -f Makefile &&
290 test -f README &&
291 test -f src/part1.c &&
292 test -f src/part2.c &&
293 test ! -f a.out &&
294 test ! -f src/part3.c &&
295 test ! -d docs &&
296 test ! -f obj.o &&
297 test ! -d build
298
299'
300
47a528ad 301test_expect_success 'git clean -X' '
ec0e0f25
MS
302
303 mkdir -p build docs &&
304 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
47a528ad 305 git clean -X &&
ec0e0f25
MS
306 test -f Makefile &&
307 test -f README &&
308 test -f src/part1.c &&
309 test -f src/part2.c &&
310 test -f a.out &&
311 test -f src/part3.c &&
312 test -f docs/manual.txt &&
313 test ! -f obj.o &&
314 test -f build/lib.so
315
316'
317
47a528ad 318test_expect_success 'git clean -d -X' '
ec0e0f25
MS
319
320 mkdir -p build docs &&
321 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
47a528ad 322 git clean -d -X &&
ec0e0f25
MS
323 test -f Makefile &&
324 test -f README &&
325 test -f src/part1.c &&
326 test -f src/part2.c &&
327 test -f a.out &&
328 test -f src/part3.c &&
329 test -f docs/manual.txt &&
330 test ! -f obj.o &&
331 test ! -d build
332
333'
334
562ca192
JH
335test_expect_success 'clean.requireForce defaults to true' '
336
337 git config --unset clean.requireForce &&
d492b31c 338 test_must_fail git clean
562ca192
JH
339
340'
341
ec0e0f25
MS
342test_expect_success 'clean.requireForce' '
343
5be60078 344 git config clean.requireForce true &&
d492b31c 345 test_must_fail git clean
ec0e0f25
MS
346
347'
348
349test_expect_success 'clean.requireForce and -n' '
350
351 mkdir -p build docs &&
352 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
47a528ad 353 git clean -n &&
ec0e0f25
MS
354 test -f Makefile &&
355 test -f README &&
356 test -f src/part1.c &&
357 test -f src/part2.c &&
358 test -f a.out &&
359 test -f src/part3.c &&
360 test -f docs/manual.txt &&
361 test -f obj.o &&
362 test -f build/lib.so
363
364'
365
366test_expect_success 'clean.requireForce and -f' '
367
47a528ad 368 git clean -f &&
ec0e0f25
MS
369 test -f README &&
370 test -f src/part1.c &&
371 test -f src/part2.c &&
372 test ! -f a.out &&
373 test ! -f src/part3.c &&
374 test -f docs/manual.txt &&
375 test -f obj.o &&
376 test -f build/lib.so
377
378'
379
b57321f5
JH
380test_expect_success 'core.excludesfile' '
381
382 echo excludes >excludes &&
383 echo included >included &&
384 git config core.excludesfile excludes &&
385 output=$(git clean -n excludes included 2>&1) &&
386 expr "$output" : ".*included" >/dev/null &&
387 ! expr "$output" : ".*excludes" >/dev/null
388
389'
390
c91cfd19 391test_expect_success SANITY 'removal failure' '
aa9c83c2
MV
392
393 mkdir foo &&
394 touch foo/bar &&
e2c24076
JS
395 (exec <foo/bar &&
396 chmod 0 foo &&
c91cfd19
ÆAB
397 test_must_fail git clean -f -d &&
398 chmod 755 foo)
aa9c83c2 399'
aa9c83c2 400
a0f4afbe
JH
401test_expect_success 'nested git work tree' '
402 rm -fr foo bar &&
403 mkdir foo bar &&
404 (
405 cd foo &&
406 git init &&
407 >hello.world
408 git add . &&
409 git commit -a -m nested
410 ) &&
411 (
412 cd bar &&
413 >goodbye.people
414 ) &&
415 git clean -f -d &&
416 test -f foo/.git/index &&
417 test -f foo/hello.world &&
418 ! test -d bar
419'
420
421test_expect_success 'force removal of nested git work tree' '
422 rm -fr foo bar &&
423 mkdir foo bar &&
424 (
425 cd foo &&
426 git init &&
427 >hello.world
428 git add . &&
429 git commit -a -m nested
430 ) &&
431 (
432 cd bar &&
433 >goodbye.people
434 ) &&
435 git clean -f -f -d &&
436 ! test -d foo &&
437 ! test -d bar
438'
439
2c76c3fe
JH
440test_expect_success 'git clean -e' '
441 rm -fr repo &&
442 mkdir repo &&
443 (
444 cd repo &&
445 git init &&
84d69402 446 touch known 1 2 3 &&
2c76c3fe
JH
447 git add known &&
448 git clean -f -e 1 -e 2 &&
449 test -e 1 &&
450 test -e 2 &&
451 ! (test -e 3) &&
452 test -e known
453 )
454'
455
ec0e0f25 456test_done