For any command that takes a pathspec, passing an empty string will execute the command on all files in the current directory. This results in unexpected behavior. For example, git add "" adds all files to staging, while git rm -rf "" recursively removes all files from the working tree and index. A two-step implemetation will prevent such cases. This patch, as step one, invokes a warning whenever an empty string is detected as a pathspec, introducing users to the upcoming change. For step two, a follow-up patch several release cycles later will remove the warnings and actually implement the change by throwing an error instead. Signed-off-by: Emily Xie <emilyxxie@xxxxxxxxx> Reported-by: David Turner <novalis@xxxxxxxxxxx> Mentored-by: Michail Denchev <mdenchev@xxxxxxxxx> Thanks-to: Sarah Sharp <sarah@xxxxxxxxxxxx> and James Sharp <jamey@xxxxxxxxxxx> --- pathspec.c | 6 +++++- t/t3600-rm.sh | 6 +++++- t/t3700-add.sh | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pathspec.c b/pathspec.c index c9e9b6c..79e370e 100644 --- a/pathspec.c +++ b/pathspec.c @@ -402,8 +402,12 @@ void parse_pathspec(struct pathspec *pathspec, } n = 0; - while (argv[n]) + while (argv[n]) { + if (*argv[n] == '\0') + warning(_("empty strings are not valid pathspecs and will no longer " + "be supported in upcoming releases")); n++; + } pathspec->nr = n; ALLOC_ARRAY(pathspec->items, n); diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh index d046d98..4503a14 100755 --- a/t/t3600-rm.sh +++ b/t/t3600-rm.sh @@ -881,4 +881,8 @@ test_expect_success 'rm files with two different errors' ' test_i18ncmp expect actual ' -test_done +test_expect_success 'rm empty string should invoke warning' ' + git rm -rf "" 2>&1 | grep "warning: empty string" +' + +test_done \ No newline at end of file diff --git a/t/t3700-add.sh b/t/t3700-add.sh index f14a665..5dbe8c2 100755 --- a/t/t3700-add.sh +++ b/t/t3700-add.sh @@ -207,6 +207,10 @@ test_expect_success POSIXPERM,SANITY 'git add should fail atomically upon an unr ! ( git ls-files foo1 | grep foo1 ) ' +test_expect_success 'git add empty string should invoke warning' ' + git add "" 2>&1 | grep "warning: empty string" +' + rm -f foo2 test_expect_success POSIXPERM,SANITY 'git add --ignore-errors' ' -- 2.8.4 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html