t7300: add tests to document behavior of clean and nested git
Signed-off-by: Erik Elfström <erik.elfstrom@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
921bdd96af
commit
91479b9c72
142
t/t7300-clean.sh
142
t/t7300-clean.sh
@ -455,6 +455,148 @@ test_expect_success 'nested git work tree' '
|
||||
! test -d bar
|
||||
'
|
||||
|
||||
test_expect_failure 'should clean things that almost look like git but are not' '
|
||||
rm -fr almost_git almost_bare_git almost_submodule &&
|
||||
mkdir -p almost_git/.git/objects &&
|
||||
mkdir -p almost_git/.git/refs &&
|
||||
cat >almost_git/.git/HEAD <<-\EOF &&
|
||||
garbage
|
||||
EOF
|
||||
cp -r almost_git/.git/ almost_bare_git &&
|
||||
mkdir almost_submodule/ &&
|
||||
cat >almost_submodule/.git <<-\EOF &&
|
||||
garbage
|
||||
EOF
|
||||
test_when_finished "rm -rf almost_*" &&
|
||||
## This will fail due to die("Invalid gitfile format: %s", path); in
|
||||
## setup.c:read_gitfile.
|
||||
git clean -f -d &&
|
||||
test_path_is_missing almost_git &&
|
||||
test_path_is_missing almost_bare_git &&
|
||||
test_path_is_missing almost_submodule
|
||||
'
|
||||
|
||||
test_expect_success 'should not clean submodules' '
|
||||
rm -fr repo to_clean sub1 sub2 &&
|
||||
mkdir repo to_clean &&
|
||||
(
|
||||
cd repo &&
|
||||
git init &&
|
||||
test_commit msg hello.world
|
||||
) &&
|
||||
git submodule add ./repo/.git sub1 &&
|
||||
git commit -m "sub1" &&
|
||||
git branch before_sub2 &&
|
||||
git submodule add ./repo/.git sub2 &&
|
||||
git commit -m "sub2" &&
|
||||
git checkout before_sub2 &&
|
||||
>to_clean/should_clean.this &&
|
||||
git clean -f -d &&
|
||||
test_path_is_file repo/.git/index &&
|
||||
test_path_is_file repo/hello.world &&
|
||||
test_path_is_file sub1/.git &&
|
||||
test_path_is_file sub1/hello.world &&
|
||||
test_path_is_file sub2/.git &&
|
||||
test_path_is_file sub2/hello.world &&
|
||||
test_path_is_missing to_clean
|
||||
'
|
||||
|
||||
test_expect_failure 'should avoid cleaning possible submodules' '
|
||||
rm -fr to_clean possible_sub1 &&
|
||||
mkdir to_clean possible_sub1 &&
|
||||
test_when_finished "rm -rf possible_sub*" &&
|
||||
echo "gitdir: foo" >possible_sub1/.git &&
|
||||
>possible_sub1/hello.world &&
|
||||
chmod 0 possible_sub1/.git &&
|
||||
>to_clean/should_clean.this &&
|
||||
git clean -f -d &&
|
||||
test_path_is_file possible_sub1/.git &&
|
||||
test_path_is_file possible_sub1/hello.world &&
|
||||
test_path_is_missing to_clean
|
||||
'
|
||||
|
||||
test_expect_failure 'nested (empty) git should be kept' '
|
||||
rm -fr empty_repo to_clean &&
|
||||
git init empty_repo &&
|
||||
mkdir to_clean &&
|
||||
>to_clean/should_clean.this &&
|
||||
git clean -f -d &&
|
||||
test_path_is_file empty_repo/.git/HEAD &&
|
||||
test_path_is_missing to_clean
|
||||
'
|
||||
|
||||
test_expect_success 'nested bare repositories should be cleaned' '
|
||||
rm -fr bare1 bare2 subdir &&
|
||||
git init --bare bare1 &&
|
||||
git clone --local --bare . bare2 &&
|
||||
mkdir subdir &&
|
||||
cp -r bare2 subdir/bare3 &&
|
||||
git clean -f -d &&
|
||||
test_path_is_missing bare1 &&
|
||||
test_path_is_missing bare2 &&
|
||||
test_path_is_missing subdir
|
||||
'
|
||||
|
||||
test_expect_success 'nested (empty) bare repositories should be cleaned even when in .git' '
|
||||
rm -fr strange_bare &&
|
||||
mkdir strange_bare &&
|
||||
git init --bare strange_bare/.git &&
|
||||
git clean -f -d &&
|
||||
test_path_is_missing strange_bare
|
||||
'
|
||||
|
||||
test_expect_failure 'nested (non-empty) bare repositories should be cleaned even when in .git' '
|
||||
rm -fr strange_bare &&
|
||||
mkdir strange_bare &&
|
||||
git clone --local --bare . strange_bare/.git &&
|
||||
git clean -f -d &&
|
||||
test_path_is_missing strange_bare
|
||||
'
|
||||
|
||||
test_expect_success 'giving path in nested git work tree will remove it' '
|
||||
rm -fr repo &&
|
||||
mkdir repo &&
|
||||
(
|
||||
cd repo &&
|
||||
git init &&
|
||||
mkdir -p bar/baz &&
|
||||
test_commit msg bar/baz/hello.world
|
||||
) &&
|
||||
git clean -f -d repo/bar/baz &&
|
||||
test_path_is_file repo/.git/HEAD &&
|
||||
test_path_is_dir repo/bar/ &&
|
||||
test_path_is_missing repo/bar/baz
|
||||
'
|
||||
|
||||
test_expect_success 'giving path to nested .git will not remove it' '
|
||||
rm -fr repo &&
|
||||
mkdir repo untracked &&
|
||||
(
|
||||
cd repo &&
|
||||
git init &&
|
||||
test_commit msg hello.world
|
||||
) &&
|
||||
git clean -f -d repo/.git &&
|
||||
test_path_is_file repo/.git/HEAD &&
|
||||
test_path_is_dir repo/.git/refs &&
|
||||
test_path_is_dir repo/.git/objects &&
|
||||
test_path_is_dir untracked/
|
||||
'
|
||||
|
||||
test_expect_success 'giving path to nested .git/ will remove contents' '
|
||||
rm -fr repo untracked &&
|
||||
mkdir repo untracked &&
|
||||
(
|
||||
cd repo &&
|
||||
git init &&
|
||||
test_commit msg hello.world
|
||||
) &&
|
||||
git clean -f -d repo/.git/ &&
|
||||
test_path_is_dir repo/.git &&
|
||||
test_dir_is_empty repo/.git &&
|
||||
test_path_is_dir untracked/
|
||||
'
|
||||
|
||||
test_expect_success 'force removal of nested git work tree' '
|
||||
rm -fr foo bar baz &&
|
||||
mkdir -p foo bar baz/boo &&
|
||||
|
Loading…
Reference in New Issue
Block a user