Skip to content

Commit 16d1ba7

Browse files
vdyedscho
authored andcommitted
Fix sparse-checkout set crashes (#607)
2 parents ffe89db + c8f4733 commit 16d1ba7

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

sparse-index.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ void expand_index(struct index_state *istate, struct pattern_list *pl)
399399
if (pl &&
400400
path_matches_pattern_list(ce->name, ce->ce_namelen,
401401
NULL, &dtype,
402-
pl, istate) == NOT_MATCHED) {
402+
pl, full) == NOT_MATCHED) {
403403
set_index_entry(full, full->cache_nr++, ce);
404404
continue;
405405
}
@@ -427,6 +427,7 @@ void expand_index(struct index_state *istate, struct pattern_list *pl)
427427
}
428428

429429
/* Copy back into original index. */
430+
istate->name_hash_initialized = full->name_hash_initialized;
430431
memcpy(&istate->name_hash, &full->name_hash, sizeof(full->name_hash));
431432
memcpy(&istate->dir_hash, &full->dir_hash, sizeof(full->dir_hash));
432433
istate->sparse_index = pl ? INDEX_PARTIALLY_SPARSE : INDEX_EXPANDED;

t/t1092-sparse-checkout-compatibility.sh

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,22 @@ test_expect_success 'root directory cannot be sparse' '
313313
test_cmp expect actual
314314
'
315315

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

0 commit comments

Comments
 (0)