зеркало из https://github.com/microsoft/git.git
sparse-checkout: fix cone mode behavior mismatch
The intention of the special "cone mode" in the sparse-checkout feature is to always match the same patterns that are matched by the same sparse-checkout file as when cone mode is disabled. When a file path is given to "git sparse-checkout set" in cone mode, then the cone mode improperly matches the file as a recursive path. When setting the skip-worktree bits, files were not expecting the MATCHED_RECURSIVE response, and hence these were left out of the matched cone. Fix this bug by checking for MATCHED_RECURSIVE in addition to MATCHED and add a test that prevents regression. Reported-by: Finn Bryant <finnbryant@gmail.com> Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
d2e65f4c90
Коммит
f998a3f1e5
|
@ -305,6 +305,18 @@ test_expect_success 'different sparse-checkouts with worktrees' '
|
|||
check_files worktree a deep
|
||||
'
|
||||
|
||||
test_expect_success 'set using filename keeps file on-disk' '
|
||||
git -C repo sparse-checkout set a deep &&
|
||||
cat >expect <<-\EOF &&
|
||||
/*
|
||||
!/*/
|
||||
/a/
|
||||
/deep/
|
||||
EOF
|
||||
test_cmp expect repo/.git/info/sparse-checkout &&
|
||||
check_files repo a deep
|
||||
'
|
||||
|
||||
check_read_tree_errors () {
|
||||
REPO=$1
|
||||
FILES=$2
|
||||
|
|
|
@ -1416,7 +1416,7 @@ static int clear_ce_flags_1(struct index_state *istate,
|
|||
name, &dtype, pl, istate);
|
||||
if (ret == UNDECIDED)
|
||||
ret = default_match;
|
||||
if (ret == MATCHED)
|
||||
if (ret == MATCHED || ret == MATCHED_RECURSIVE)
|
||||
ce->ce_flags &= ~clear_mask;
|
||||
cache++;
|
||||
progress_nr++;
|
||||
|
|
Загрузка…
Ссылка в новой задаче