Browse Source

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
maint
Junio C Hamano 8 years ago
parent
commit
3b1e135b87
  1. 11
      pathspec.c
  2. 5
      t/t3600-rm.sh
  3. 5
      t/t3700-add.sh

11
pathspec.c

@ -364,7 +364,7 @@ void parse_pathspec(struct pathspec *pathspec, @@ -364,7 +364,7 @@ void parse_pathspec(struct pathspec *pathspec,
{
struct pathspec_item *item;
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));

@ -402,8 +402,15 @@ void parse_pathspec(struct pathspec *pathspec, @@ -402,8 +402,15 @@ void parse_pathspec(struct pathspec *pathspec,
}

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++;
}

pathspec->nr = n;
ALLOC_ARRAY(pathspec->items, n);

5
t/t3600-rm.sh

@ -881,4 +881,9 @@ test_expect_success 'rm files with two different errors' ' @@ -881,4 +881,9 @@ test_expect_success 'rm files with two different errors' '
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

5
t/t3700-add.sh

@ -331,6 +331,11 @@ test_expect_success 'git add --dry-run --ignore-missing of non-existing file out @@ -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_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' '
rm -f foo1 &&
echo foo >foo1 &&

Loading…
Cancel
Save