blob: 04118ad75be8462fa2ee1e5e870feb0a44ac0482 [file] [log] [blame]
Michael Spangec0e0f22007-05-06 15:50:54 -04001#!/bin/sh
2#
3# Copyright (c) 2007 Michael Spang
4#
5
Nanako Shiraishi47a528a2008-09-03 17:59:33 +09006test_description='git clean basic tests'
Michael Spangec0e0f22007-05-06 15:50:54 -04007
8. ./test-lib.sh
9
Junio C Hamano562ca192007-11-01 17:32:04 -070010git config clean.requireForce no
11
Michael Spangec0e0f22007-05-06 15:50:54 -040012test_expect_success 'setup' '
13
14 mkdir -p src &&
15 touch src/part1.c Makefile &&
16 echo build >.gitignore &&
17 echo \*.o >>.gitignore &&
Junio C Hamano5be60072007-07-02 22:52:14 -070018 git add . &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +090019 git commit -m setup &&
Michael Spangec0e0f22007-05-06 15:50:54 -040020 touch src/part2.c README &&
Junio C Hamano5be60072007-07-02 22:52:14 -070021 git add .
Michael Spangec0e0f22007-05-06 15:50:54 -040022
23'
24
Nguyễn Thái Ngọc Duyc28b3d62009-08-20 20:47:01 +070025test_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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +090044test_expect_success 'git clean' '
Michael Spangec0e0f22007-05-06 15:50:54 -040045
46 mkdir -p build docs &&
47 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +090048 git clean &&
Michael Spangec0e0f22007-05-06 15:50:54 -040049 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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +090061test_expect_success 'git clean src/' '
Shawn Bohrerae3e76c2007-11-04 22:28:12 -060062
63 mkdir -p build docs &&
64 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +090065 git clean src/ &&
Shawn Bohrerae3e76c2007-11-04 22:28:12 -060066 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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +090078test_expect_success 'git clean src/ src/' '
Shawn Bohrerae3e76c2007-11-04 22:28:12 -060079
80 mkdir -p build docs &&
81 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +090082 git clean src/ src/ &&
Shawn Bohrerae3e76c2007-11-04 22:28:12 -060083 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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +090095test_expect_success 'git clean with prefix' '
Shawn Bohrerae3e76c2007-11-04 22:28:12 -060096
Shawn Bohrer2b6f0b02008-04-13 18:49:38 -050097 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 &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +090099 (cd src/ && git clean) &&
Shawn Bohrerae3e76c2007-11-04 22:28:12 -0600100 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 &&
Shawn Bohrer2b6f0b02008-04-13 18:49:38 -0500106 test -f src/test/1.c &&
Shawn Bohrerae3e76c2007-11-04 22:28:12 -0600107 test -f docs/manual.txt &&
108 test -f obj.o &&
109 test -f build/lib.so
110
111'
Junio C Hamano5b7570c2008-03-07 21:56:56 -0800112
Ævar Arnfjörð Bjarmason2da57ad2011-02-22 23:42:21 +0000113test_expect_success C_LOCALE_OUTPUT 'git clean with relative prefix' '
Junio C Hamano5b7570c2008-03-07 21:56:56 -0800114
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
Ævar Arnfjörð Bjarmason2da57ad2011-02-22 23:42:21 +0000128test_expect_success C_LOCALE_OUTPUT 'git clean with absolute path' '
Junio C Hamano5b7570c2008-03-07 21:56:56 -0800129
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 &&
Bryan Donlanf69e8362008-05-04 01:37:59 -0400134 git clean -n "$(pwd)/../src" |
Junio C Hamano5b7570c2008-03-07 21:56:56 -0800135 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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900143test_expect_success 'git clean with out of work tree relative path' '
Junio C Hamano5b7570c2008-03-07 21:56:56 -0800144
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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900153test_expect_success 'git clean with out of work tree absolute path' '
Junio C Hamano5b7570c2008-03-07 21:56:56 -0800154
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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900164test_expect_success 'git clean -d with prefix and path' '
Shawn Bohrerae3e76c2007-11-04 22:28:12 -0600165
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 &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900168 (cd src/ && git clean -d feature/) &&
Shawn Bohrerae3e76c2007-11-04 22:28:12 -0600169 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
Johannes Sixt7569c1f2010-11-25 09:03:39 +0100182test_expect_success SYMLINKS 'git clean symbolic link' '
Shawn Bohrerae3e76c2007-11-04 22:28:12 -0600183
184 mkdir -p build docs &&
185 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Jonathan Nieder2dec68c2010-10-31 02:30:58 -0500186 ln -s docs/manual.txt src/part4.c &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900187 git clean &&
Shawn Bohrerae3e76c2007-11-04 22:28:12 -0600188 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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900201test_expect_success 'git clean with wildcard' '
Jeff Kingd3357ab2007-12-05 22:28:06 -0500202
203 touch a.clean b.clean other.c &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900204 git clean "*.clean" &&
Jeff Kingd3357ab2007-12-05 22:28:06 -0500205 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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900215test_expect_success 'git clean -n' '
Michael Spangec0e0f22007-05-06 15:50:54 -0400216
217 mkdir -p build docs &&
218 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900219 git clean -n &&
Michael Spangec0e0f22007-05-06 15:50:54 -0400220 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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900232test_expect_success 'git clean -d' '
Michael Spangec0e0f22007-05-06 15:50:54 -0400233
234 mkdir -p build docs &&
235 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900236 git clean -d &&
Michael Spangec0e0f22007-05-06 15:50:54 -0400237 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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900249test_expect_success 'git clean -d src/ examples/' '
Shawn Bohrerae3e76c2007-11-04 22:28:12 -0600250
251 mkdir -p build docs examples &&
252 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so examples/1.c &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900253 git clean -d src/ examples/ &&
Shawn Bohrerae3e76c2007-11-04 22:28:12 -0600254 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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900267test_expect_success 'git clean -x' '
Michael Spangec0e0f22007-05-06 15:50:54 -0400268
269 mkdir -p build docs &&
270 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900271 git clean -x &&
Michael Spangec0e0f22007-05-06 15:50:54 -0400272 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
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900284test_expect_success 'git clean -d -x' '
Michael Spangec0e0f22007-05-06 15:50:54 -0400285
286 mkdir -p build docs &&
287 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900288 git clean -d -x &&
Michael Spangec0e0f22007-05-06 15:50:54 -0400289 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
Karsten Blees5bd8e2d2013-04-15 21:10:05 +0200301test_expect_success 'git clean -d -x with ignored tracked directory' '
302
303 mkdir -p build docs &&
304 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
305 git clean -d -x -e src &&
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 ! -d docs &&
313 test ! -f obj.o &&
314 test ! -d build
315
316'
317
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900318test_expect_success 'git clean -X' '
Michael Spangec0e0f22007-05-06 15:50:54 -0400319
320 mkdir -p build docs &&
321 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900322 git clean -X &&
Michael Spangec0e0f22007-05-06 15:50:54 -0400323 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 -f build/lib.so
332
333'
334
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900335test_expect_success 'git clean -d -X' '
Michael Spangec0e0f22007-05-06 15:50:54 -0400336
337 mkdir -p build docs &&
338 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900339 git clean -d -X &&
Michael Spangec0e0f22007-05-06 15:50:54 -0400340 test -f Makefile &&
341 test -f README &&
342 test -f src/part1.c &&
343 test -f src/part2.c &&
344 test -f a.out &&
345 test -f src/part3.c &&
346 test -f docs/manual.txt &&
347 test ! -f obj.o &&
348 test ! -d build
349
350'
351
Karsten Blees5bd8e2d2013-04-15 21:10:05 +0200352test_expect_success 'git clean -d -X with ignored tracked directory' '
353
354 mkdir -p build docs &&
355 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
356 git clean -d -X -e src &&
357 test -f Makefile &&
358 test -f README &&
359 test -f src/part1.c &&
360 test -f src/part2.c &&
361 test -f a.out &&
362 test ! -f src/part3.c &&
363 test -f docs/manual.txt &&
364 test ! -f obj.o &&
365 test ! -d build
366
367'
368
Junio C Hamano562ca192007-11-01 17:32:04 -0700369test_expect_success 'clean.requireForce defaults to true' '
370
371 git config --unset clean.requireForce &&
Stephan Beyerd492b312008-07-12 17:47:52 +0200372 test_must_fail git clean
Junio C Hamano562ca192007-11-01 17:32:04 -0700373
374'
375
Michael Spangec0e0f22007-05-06 15:50:54 -0400376test_expect_success 'clean.requireForce' '
377
Junio C Hamano5be60072007-07-02 22:52:14 -0700378 git config clean.requireForce true &&
Stephan Beyerd492b312008-07-12 17:47:52 +0200379 test_must_fail git clean
Michael Spangec0e0f22007-05-06 15:50:54 -0400380
381'
382
383test_expect_success 'clean.requireForce and -n' '
384
385 mkdir -p build docs &&
386 touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900387 git clean -n &&
Michael Spangec0e0f22007-05-06 15:50:54 -0400388 test -f Makefile &&
389 test -f README &&
390 test -f src/part1.c &&
391 test -f src/part2.c &&
392 test -f a.out &&
393 test -f src/part3.c &&
394 test -f docs/manual.txt &&
395 test -f obj.o &&
396 test -f build/lib.so
397
398'
399
400test_expect_success 'clean.requireForce and -f' '
401
Nanako Shiraishi47a528a2008-09-03 17:59:33 +0900402 git clean -f &&
Michael Spangec0e0f22007-05-06 15:50:54 -0400403 test -f README &&
404 test -f src/part1.c &&
405 test -f src/part2.c &&
406 test ! -f a.out &&
407 test ! -f src/part3.c &&
408 test -f docs/manual.txt &&
409 test -f obj.o &&
410 test -f build/lib.so
411
412'
413
Ævar Arnfjörð Bjarmason2da57ad2011-02-22 23:42:21 +0000414test_expect_success C_LOCALE_OUTPUT 'core.excludesfile' '
Junio C Hamanob57321f2007-11-14 01:54:43 -0800415
416 echo excludes >excludes &&
417 echo included >included &&
418 git config core.excludesfile excludes &&
419 output=$(git clean -n excludes included 2>&1) &&
420 expr "$output" : ".*included" >/dev/null &&
421 ! expr "$output" : ".*excludes" >/dev/null
422
423'
424
Ævar Arnfjörð Bjarmasonc91cfd12010-08-06 22:09:09 +0000425test_expect_success SANITY 'removal failure' '
Miklos Vajnaaa9c83c2008-02-21 02:44:46 +0100426
427 mkdir foo &&
428 touch foo/bar &&
Jeff King45067fc2014-07-02 14:44:30 -0400429 test_when_finished "chmod 755 foo" &&
Johannes Schindeline2c24072009-03-11 17:58:32 +0100430 (exec <foo/bar &&
431 chmod 0 foo &&
Jeff King45067fc2014-07-02 14:44:30 -0400432 test_must_fail git clean -f -d)
Miklos Vajnaaa9c83c2008-02-21 02:44:46 +0100433'
Miklos Vajnaaa9c83c2008-02-21 02:44:46 +0100434
Junio C Hamanoa0f4afb2009-06-30 15:33:45 -0700435test_expect_success 'nested git work tree' '
Junio C Hamanoae2f2032012-03-15 01:04:12 -0700436 rm -fr foo bar baz &&
437 mkdir -p foo bar baz/boo &&
Junio C Hamanoa0f4afb2009-06-30 15:33:45 -0700438 (
439 cd foo &&
440 git init &&
441 >hello.world
442 git add . &&
443 git commit -a -m nested
444 ) &&
445 (
446 cd bar &&
447 >goodbye.people
448 ) &&
Junio C Hamanoae2f2032012-03-15 01:04:12 -0700449 (
450 cd baz/boo &&
451 git init &&
452 >deeper.world
453 git add . &&
454 git commit -a -m deeply.nested
455 ) &&
Junio C Hamanoa0f4afb2009-06-30 15:33:45 -0700456 git clean -f -d &&
457 test -f foo/.git/index &&
458 test -f foo/hello.world &&
Junio C Hamanoae2f2032012-03-15 01:04:12 -0700459 test -f baz/boo/.git/index &&
460 test -f baz/boo/deeper.world &&
Junio C Hamanoa0f4afb2009-06-30 15:33:45 -0700461 ! test -d bar
462'
463
464test_expect_success 'force removal of nested git work tree' '
Junio C Hamanoae2f2032012-03-15 01:04:12 -0700465 rm -fr foo bar baz &&
466 mkdir -p foo bar baz/boo &&
Junio C Hamanoa0f4afb2009-06-30 15:33:45 -0700467 (
468 cd foo &&
469 git init &&
470 >hello.world
471 git add . &&
472 git commit -a -m nested
473 ) &&
474 (
475 cd bar &&
476 >goodbye.people
477 ) &&
Junio C Hamanoae2f2032012-03-15 01:04:12 -0700478 (
479 cd baz/boo &&
480 git init &&
481 >deeper.world
482 git add . &&
483 git commit -a -m deeply.nested
484 ) &&
Junio C Hamanoa0f4afb2009-06-30 15:33:45 -0700485 git clean -f -f -d &&
486 ! test -d foo &&
Junio C Hamanoae2f2032012-03-15 01:04:12 -0700487 ! test -d bar &&
488 ! test -d baz
Junio C Hamanoa0f4afb2009-06-30 15:33:45 -0700489'
490
Jared Hance2c76c3f2010-07-20 15:36:21 -0400491test_expect_success 'git clean -e' '
492 rm -fr repo &&
493 mkdir repo &&
494 (
495 cd repo &&
496 git init &&
Brandon Casey84d69402010-09-15 15:58:22 -0500497 touch known 1 2 3 &&
Jared Hance2c76c3f2010-07-20 15:36:21 -0400498 git add known &&
499 git clean -f -e 1 -e 2 &&
500 test -e 1 &&
501 test -e 2 &&
502 ! (test -e 3) &&
503 test -e known
504 )
505'
506
Alex Riesen02350172011-04-01 10:29:16 +0200507test_expect_success SANITY 'git clean -d with an unreadable empty directory' '
508 mkdir foo &&
509 chmod a= foo &&
510 git clean -dfx foo &&
511 ! test -d foo
512'
513
Jeff Kingcf424f52014-03-10 16:37:30 -0400514test_expect_success 'git clean -d respects pathspecs (dir is prefix of pathspec)' '
515 mkdir -p foo &&
516 mkdir -p foobar &&
517 git clean -df foobar &&
518 test_path_is_dir foo &&
519 test_path_is_missing foobar
520'
521
522test_expect_success 'git clean -d respects pathspecs (pathspec is prefix of dir)' '
523 mkdir -p foo &&
524 mkdir -p foobar &&
525 git clean -df foo &&
526 test_path_is_missing foo &&
527 test_path_is_dir foobar
528'
529
Michael Spangec0e0f22007-05-06 15:50:54 -0400530test_done