|
|
|
@ -455,6 +455,148 @@ test_expect_success 'nested git work tree' '
@@ -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 && |
|
|
|
|