Merge branch 'ws/single-file-cone' into maint-2.39

The logic to see if we are using the "cone" mode by checking the
sparsity patterns has been tightened to avoid mistaking a pattern
that names a single file as specifying a cone.

* ws/single-file-cone:
  dir: check for single file cone patterns
This commit is contained in:
Junio C Hamano 2023-02-14 14:15:51 -08:00
commit 4950677b48
2 changed files with 17 additions and 1 deletions

7
dir.c
View File

@ -732,6 +732,13 @@ static void add_pattern_to_hashsets(struct pattern_list *pl, struct path_pattern
goto clear_hashmaps;
}
if (!(given->flags & PATTERN_FLAG_MUSTBEDIR) &&
strcmp(given->pattern, "/*")) {
/* Not a cone pattern. */
warning(_("unrecognized pattern: '%s'"), given->pattern);
goto clear_hashmaps;
}
prev = given->pattern;
cur = given->pattern + 1;
next = given->pattern + 2;

View File

@ -238,7 +238,7 @@ test_expect_success 'cone mode: match patterns' '
test_expect_success 'cone mode: warn on bad pattern' '
test_when_finished mv sparse-checkout repo/.git/info/ &&
cp repo/.git/info/sparse-checkout . &&
echo "!/deep/deeper/*" >>repo/.git/info/sparse-checkout &&
echo "!/deep/deeper/*/" >>repo/.git/info/sparse-checkout &&
git -C repo read-tree -mu HEAD 2>err &&
test_i18ngrep "unrecognized negative pattern" err
'
@ -667,6 +667,15 @@ test_expect_success 'pattern-checks: starting "*"' '
check_read_tree_errors repo "a deep" "disabling cone pattern matching"
'
test_expect_success 'pattern-checks: non directory pattern' '
cat >repo/.git/info/sparse-checkout <<-\EOF &&
/deep/deeper1/a
EOF
check_read_tree_errors repo deep "disabling cone pattern matching" &&
check_files repo/deep deeper1 &&
check_files repo/deep/deeper1 a
'
test_expect_success 'pattern-checks: contained glob characters' '
for c in "[a]" "\\" "?" "*"
do