diff options
author | SZEDER Gábor <szeder.dev@gmail.com> | 2019-08-25 20:59:18 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-08-26 12:01:33 -0700 |
commit | 502c386ff944898c1327a5b5a0fefcd4f62d613a (patch) | |
tree | 960bfc4bb9e99c17ced1dcaeaa9c9de57a0f4181 /t | |
parent | Git 2.22.1 (diff) | |
download | tgif-502c386ff944898c1327a5b5a0fefcd4f62d613a.tar.xz |
t7300-clean: demonstrate deleting nested repo with an ignored file breakage
'git clean -fd' must not delete an untracked directory if it belongs
to a different Git repository or worktree. Unfortunately, if a
'.gitignore' rule in the outer repository happens to match a file in a
nested repository or worktree, then something goes awry and 'git clean
-fd' does delete the content of the nested repository's worktree
except that ignored file, potentially leading to data loss.
Add a test to 't7300-clean.sh' to demonstrate this breakage.
This issue is a regression introduced in 6b1db43109 (clean: teach
clean -d to preserve ignored paths, 2017-05-23).
Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't')
-rwxr-xr-x | t/t7300-clean.sh | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh index a2c45d1902..d01fd120ab 100755 --- a/t/t7300-clean.sh +++ b/t/t7300-clean.sh @@ -669,6 +669,28 @@ test_expect_success 'git clean -d skips untracked dirs containing ignored files' test_path_is_missing foo/b/bb ' +test_expect_failure 'git clean -d skips nested repo containing ignored files' ' + test_when_finished "rm -rf nested-repo-with-ignored-file" && + + git init nested-repo-with-ignored-file && + ( + cd nested-repo-with-ignored-file && + >file && + git add file && + git commit -m Initial && + + # This file is ignored by a .gitignore rule in the outer repo + # added in the previous test. + >ignoreme + ) && + + git clean -fd && + + test_path_is_file nested-repo-with-ignored-file/.git/index && + test_path_is_file nested-repo-with-ignored-file/ignoreme && + test_path_is_file nested-repo-with-ignored-file/file +' + test_expect_success MINGW 'handle clean & core.longpaths = false nicely' ' test_config core.longpaths false && a50=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa && |