зеркало из https://github.com/microsoft/git.git
Fix `sparse-checkout set` crashes (#607)
This commit is contained in:
Коммит
7a3b441ce3
|
@ -371,7 +371,7 @@ void expand_index(struct index_state *istate, struct pattern_list *pl)
|
|||
if (pl &&
|
||||
path_matches_pattern_list(ce->name, ce->ce_namelen,
|
||||
NULL, &dtype,
|
||||
pl, istate) == NOT_MATCHED) {
|
||||
pl, full) == NOT_MATCHED) {
|
||||
set_index_entry(full, full->cache_nr++, ce);
|
||||
continue;
|
||||
}
|
||||
|
@ -399,6 +399,7 @@ void expand_index(struct index_state *istate, struct pattern_list *pl)
|
|||
}
|
||||
|
||||
/* Copy back into original index. */
|
||||
istate->name_hash_initialized = full->name_hash_initialized;
|
||||
memcpy(&istate->name_hash, &full->name_hash, sizeof(full->name_hash));
|
||||
memcpy(&istate->dir_hash, &full->dir_hash, sizeof(full->dir_hash));
|
||||
istate->sparse_index = pl ? INDEX_PARTIALLY_SPARSE : INDEX_EXPANDED;
|
||||
|
|
|
@ -311,6 +311,22 @@ test_expect_success 'root directory cannot be sparse' '
|
|||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'sparse-checkout with untracked files and dirs' '
|
||||
init_repos &&
|
||||
|
||||
# Empty directories outside sparse cone are deleted
|
||||
run_on_sparse mkdir -p deep/empty &&
|
||||
test_sparse_match git sparse-checkout set folder1 &&
|
||||
test_must_be_empty sparse-checkout-err &&
|
||||
run_on_sparse test_path_is_missing deep &&
|
||||
|
||||
# Untracked files outside sparse cone are not deleted
|
||||
run_on_sparse touch folder1/another &&
|
||||
test_sparse_match git sparse-checkout set folder2 &&
|
||||
grep "directory ${SQ}folder1/${SQ} contains untracked files" sparse-checkout-err &&
|
||||
run_on_sparse test_path_exists folder1/another
|
||||
'
|
||||
|
||||
test_expect_success 'status with options' '
|
||||
init_repos &&
|
||||
test_sparse_match ls &&
|
||||
|
|
Загрузка…
Ссылка в новой задаче