Merge branch 'ex/deprecate-empty-pathspec-as-match-all'
An empty string used as a pathspec element has always meant 'everything matches', but it is too easy to write a script that finds a path to remove in $path and run 'git rm "$paht"', which ends up removing everything. Start warning about this use of an empty string used for 'everything matches' and ask users to use a more explicit '.' for that instead. The hope is that existing users will not mind this change, and eventually the warning can be turned into a hard error, upgrading the deprecation into removal of this (mis)feature. * ex/deprecate-empty-pathspec-as-match-all: pathspec: warn on empty strings as pathspec
This commit is contained in:
commit
3b1e135b87
11
pathspec.c
11
pathspec.c
@ -364,7 +364,7 @@ void parse_pathspec(struct pathspec *pathspec,
|
|||||||
{
|
{
|
||||||
struct pathspec_item *item;
|
struct pathspec_item *item;
|
||||||
const char *entry = argv ? *argv : NULL;
|
const char *entry = argv ? *argv : NULL;
|
||||||
int i, n, prefixlen, nr_exclude = 0;
|
int i, n, prefixlen, warn_empty_string, nr_exclude = 0;
|
||||||
|
|
||||||
memset(pathspec, 0, sizeof(*pathspec));
|
memset(pathspec, 0, sizeof(*pathspec));
|
||||||
|
|
||||||
@ -402,8 +402,15 @@ void parse_pathspec(struct pathspec *pathspec,
|
|||||||
}
|
}
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
while (argv[n])
|
warn_empty_string = 1;
|
||||||
|
while (argv[n]) {
|
||||||
|
if (*argv[n] == '\0' && warn_empty_string) {
|
||||||
|
warning(_("empty strings as pathspecs will be made invalid in upcoming releases. "
|
||||||
|
"please use . instead if you meant to match all paths"));
|
||||||
|
warn_empty_string = 0;
|
||||||
|
}
|
||||||
n++;
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
pathspec->nr = n;
|
pathspec->nr = n;
|
||||||
ALLOC_ARRAY(pathspec->items, n);
|
ALLOC_ARRAY(pathspec->items, n);
|
||||||
|
@ -881,4 +881,9 @@ test_expect_success 'rm files with two different errors' '
|
|||||||
test_i18ncmp expect actual
|
test_i18ncmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'rm empty string should invoke warning' '
|
||||||
|
git rm -rf "" 2>output &&
|
||||||
|
test_i18ngrep "warning: empty strings" output
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
@ -331,6 +331,11 @@ test_expect_success 'git add --dry-run --ignore-missing of non-existing file out
|
|||||||
test_i18ncmp expect.err actual.err
|
test_i18ncmp expect.err actual.err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git add empty string should invoke warning' '
|
||||||
|
git add "" 2>output &&
|
||||||
|
test_i18ngrep "warning: empty strings" output
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'git add --chmod=[+-]x stages correctly' '
|
test_expect_success 'git add --chmod=[+-]x stages correctly' '
|
||||||
rm -f foo1 &&
|
rm -f foo1 &&
|
||||||
echo foo >foo1 &&
|
echo foo >foo1 &&
|
||||||
|
Loading…
Reference in New Issue
Block a user