Skip to content

Commit 2321ad9

Browse files
vdyedscho
authored andcommitted
Fix sparse-checkout set crashes (#607)
2 parents 2bf0aed + 9a3602c commit 2321ad9

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

Diff for: sparse-index.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ void expand_index(struct index_state *istate, struct pattern_list *pl)
405405
if (pl &&
406406
path_matches_pattern_list(ce->name, ce->ce_namelen,
407407
NULL, &dtype,
408-
pl, istate) == NOT_MATCHED) {
408+
pl, full) == NOT_MATCHED) {
409409
set_index_entry(full, full->cache_nr++, ce);
410410
continue;
411411
}
@@ -433,6 +433,7 @@ void expand_index(struct index_state *istate, struct pattern_list *pl)
433433
}
434434

435435
/* Copy back into original index. */
436+
istate->name_hash_initialized = full->name_hash_initialized;
436437
memcpy(&istate->name_hash, &full->name_hash, sizeof(full->name_hash));
437438
memcpy(&istate->dir_hash, &full->dir_hash, sizeof(full->dir_hash));
438439
istate->sparse_index = pl ? INDEX_PARTIALLY_SPARSE : INDEX_EXPANDED;

Diff for: t/t1092-sparse-checkout-compatibility.sh

+16
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,22 @@ test_expect_success 'root directory cannot be sparse' '
317317
test_cmp expect actual
318318
'
319319

320+
test_expect_success 'sparse-checkout with untracked files and dirs' '
321+
init_repos &&
322+
323+
# Empty directories outside sparse cone are deleted
324+
run_on_sparse mkdir -p deep/empty &&
325+
test_sparse_match git sparse-checkout set folder1 &&
326+
test_must_be_empty sparse-checkout-err &&
327+
run_on_sparse test_path_is_missing deep &&
328+
329+
# Untracked files outside sparse cone are not deleted
330+
run_on_sparse touch folder1/another &&
331+
test_sparse_match git sparse-checkout set folder2 &&
332+
grep "directory ${SQ}folder1/${SQ} contains untracked files" sparse-checkout-err &&
333+
run_on_sparse test_path_exists folder1/another
334+
'
335+
320336
test_expect_success 'status with options' '
321337
init_repos &&
322338
test_sparse_match ls &&

0 commit comments

Comments
 (0)