[PATCH] clean: demonstrate a bug with pathspecs
- From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jan 15, 2020, 20:25 UTC
- Message-ID
- <pull.526.git.1579119946211.gitgitgadget@gmail.com>
From: Derrick Stolee <dstolee@microsoft.com>
b9660c1 (dir: fix checks on common prefix directory, 2019-12-19) modified the way pathspecs are handled when handling a directory during "git clean -f <path>". While this improved the behavior for known test breakages, it also regressed in how the clean command handles cleaning a specified file.
Add a test case that demonstrates this behavior. This test passes before b9660c1 then fails after.
Helped-by: Kevin Willford <Kevin.Willford@microsoft.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
---
clean: demonstrate a bug with pathspecs
While integrating v2.25.0 into the microsoft/git fork, one of our VFS
for Git functional tests started failing. Looking into it, the only
possible place could have been where one of our integration points with
the virtualfilesystem hook was moved by c5c4edd (dir: break part of
read_directory_recursive() out for reuse, 2019-12-10) and then used in
the following two commits.
By reverting these two commits, we stopped the failure, but it took a
while before figuring out that it was a regression in Git and not a
failure in our integration to the new logic. Thanks to Kevin Willford
for producing a test case.
b9660c1 (dir: fix checks on common prefix directory, 2019-12-19) is the
culprit, so this patch is based on that. If rebased to c5c4edd, then the
test passes.
As for actually fixing this regression, I don't know how. This code is
pretty dense and I don't have a firm grasp of what is happening in both
b9660c1 and the following 777b420 (dir: synchronize tread_leading_path()
and read_directory_recursive()). Elijah is CC'd in case he still has
context on this area.
Thanks, -StoleePublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-526%2Fderrickstolee%2Fclean-bug-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-526/derrickstolee/clean-bug-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/526
t/t7300-clean.sh | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh index 6e6d24c1c3..782e125c89 100755 --- a/t/t7300-clean.sh +++ b/t/t7300-clean.sh @@ -737,4 +737,13 @@ test_expect_success MINGW 'handle clean & core.longpaths = false nicely' ' test_i18ngrep "too long" .git/err ' +test_expect_failure 'clean untracked paths by pathspec' ' + git init untracked && + mkdir untracked/dir && + echo >untracked/dir/file.txt && + git -C untracked clean -f dir/file.txt && + ls untracked/dir >actual && + test_must_be_empty actual +' + test_done base-commit: b9670c1f5e6b98837c489a03ac0d343d30e08505
-- gitgitgadget