mirror of
https://github.com/git/git.git
synced 2024-11-14 13:13:01 +01:00
d492b31caf
This patch changes every occurrence of "! git" -- with the meaning that a git call has to gracefully fail -- into "test_must_fail git". This is useful to - make sure the test does not fail because of a signal, e.g. SIGSEGV, and - advertise the use of "test_must_fail" for new tests. Signed-off-by: Stephan Beyer <s-beyer@gmx.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
383 lines
7.7 KiB
Bash
Executable file
383 lines
7.7 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2007 Michael Spang
|
|
#
|
|
|
|
test_description='git-clean basic tests'
|
|
|
|
. ./test-lib.sh
|
|
|
|
git config clean.requireForce no
|
|
|
|
test_expect_success 'setup' '
|
|
|
|
mkdir -p src &&
|
|
touch src/part1.c Makefile &&
|
|
echo build >.gitignore &&
|
|
echo \*.o >>.gitignore &&
|
|
git add . &&
|
|
git-commit -m setup &&
|
|
touch src/part2.c README &&
|
|
git add .
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
git-clean &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test ! -f src/part3.c &&
|
|
test -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean src/' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
git-clean src/ &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test ! -f src/part3.c &&
|
|
test -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean src/ src/' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
git-clean src/ src/ &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test ! -f src/part3.c &&
|
|
test -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean with prefix' '
|
|
|
|
mkdir -p build docs src/test &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so src/test/1.c &&
|
|
(cd src/ && git-clean) &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test ! -f src/part3.c &&
|
|
test -f src/test/1.c &&
|
|
test -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean with relative prefix' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
would_clean=$(
|
|
cd docs &&
|
|
git clean -n ../src |
|
|
sed -n -e "s|^Would remove ||p"
|
|
) &&
|
|
test "$would_clean" = ../src/part3.c || {
|
|
echo "OOps <$would_clean>"
|
|
false
|
|
}
|
|
'
|
|
|
|
test_expect_success 'git-clean with absolute path' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
would_clean=$(
|
|
cd docs &&
|
|
git clean -n "$(pwd)/../src" |
|
|
sed -n -e "s|^Would remove ||p"
|
|
) &&
|
|
test "$would_clean" = ../src/part3.c || {
|
|
echo "OOps <$would_clean>"
|
|
false
|
|
}
|
|
'
|
|
|
|
test_expect_success 'git-clean with out of work tree relative path' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
(
|
|
cd docs &&
|
|
test_must_fail git clean -n ../..
|
|
)
|
|
'
|
|
|
|
test_expect_success 'git-clean with out of work tree absolute path' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
dd=$(cd .. && pwd) &&
|
|
(
|
|
cd docs &&
|
|
test_must_fail git clean -n $dd
|
|
)
|
|
'
|
|
|
|
test_expect_success 'git-clean -d with prefix and path' '
|
|
|
|
mkdir -p build docs src/feature &&
|
|
touch a.out src/part3.c src/feature/file.c docs/manual.txt obj.o build/lib.so &&
|
|
(cd src/ && git-clean -d feature/) &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f src/part3.c &&
|
|
test ! -f src/feature/file.c &&
|
|
test -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean symbolic link' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
ln -s docs/manual.txt src/part4.c
|
|
git-clean &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test ! -f src/part3.c &&
|
|
test ! -f src/part4.c &&
|
|
test -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean with wildcard' '
|
|
|
|
touch a.clean b.clean other.c &&
|
|
git-clean "*.clean" &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.clean &&
|
|
test ! -f b.clean &&
|
|
test -f other.c
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean -n' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
git-clean -n &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f src/part3.c &&
|
|
test -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean -d' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
git-clean -d &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test ! -f src/part3.c &&
|
|
test ! -d docs &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean -d src/ examples/' '
|
|
|
|
mkdir -p build docs examples &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so examples/1.c &&
|
|
git-clean -d src/ examples/ &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test ! -f src/part3.c &&
|
|
test ! -f examples/1.c &&
|
|
test -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean -x' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
git-clean -x &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test ! -f src/part3.c &&
|
|
test -f docs/manual.txt &&
|
|
test ! -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean -d -x' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
git-clean -d -x &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test ! -f src/part3.c &&
|
|
test ! -d docs &&
|
|
test ! -f obj.o &&
|
|
test ! -d build
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean -X' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
git-clean -X &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f src/part3.c &&
|
|
test -f docs/manual.txt &&
|
|
test ! -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git-clean -d -X' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
git-clean -d -X &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f src/part3.c &&
|
|
test -f docs/manual.txt &&
|
|
test ! -f obj.o &&
|
|
test ! -d build
|
|
|
|
'
|
|
|
|
test_expect_success 'clean.requireForce defaults to true' '
|
|
|
|
git config --unset clean.requireForce &&
|
|
test_must_fail git clean
|
|
|
|
'
|
|
|
|
test_expect_success 'clean.requireForce' '
|
|
|
|
git config clean.requireForce true &&
|
|
test_must_fail git clean
|
|
|
|
'
|
|
|
|
test_expect_success 'clean.requireForce and -n' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
|
|
git-clean -n &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f src/part3.c &&
|
|
test -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'clean.requireForce and -f' '
|
|
|
|
git-clean -f &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test ! -f src/part3.c &&
|
|
test -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'core.excludesfile' '
|
|
|
|
echo excludes >excludes &&
|
|
echo included >included &&
|
|
git config core.excludesfile excludes &&
|
|
output=$(git clean -n excludes included 2>&1) &&
|
|
expr "$output" : ".*included" >/dev/null &&
|
|
! expr "$output" : ".*excludes" >/dev/null
|
|
|
|
'
|
|
|
|
test_expect_success 'removal failure' '
|
|
|
|
mkdir foo &&
|
|
touch foo/bar &&
|
|
exec <foo/bar &&
|
|
chmod 0 foo &&
|
|
test_must_fail git clean -f -d
|
|
|
|
'
|
|
chmod 755 foo
|
|
|
|
test_done
|