Skip to content

Commit 7c56d03

Browse files
committed
t1092: test 'git restore' with sparse index
A user reported that 'git restore --staged .' causes the sparse index to expand. This is somewhat natural because the '.' pathspec means 'check every path'. However, the restore will not update paths marked with the SKIP_WORKTREE bit, so we shouldn't need to process such entries. For now, establish the current behavior, including the sparse index expansion, in the t1092 test case as a baseline. Signed-off-by: Derrick Stolee <stolee@gmail.com>
1 parent aec3f58 commit 7c56d03

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

t/t1092-sparse-checkout-compatibility.sh

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2573,4 +2573,54 @@ test_expect_success 'sparse-index is not expanded: merge-ours' '
25732573
ensure_not_expanded merge -s ours merge-right
25742574
'
25752575

2576+
test_expect_success 'restore --staged with sparse definition' '
2577+
init_repos &&
2578+
2579+
# Stage changes within the sparse definition
2580+
test_all_match git checkout -b restore-staged-1 base &&
2581+
test_all_match git reset --soft update-deep &&
2582+
test_all_match git restore --staged . &&
2583+
test_all_match git status --porcelain=v2 &&
2584+
test_all_match git diff --cached
2585+
'
2586+
2587+
test_expect_success 'restore --staged with outside sparse definition' '
2588+
init_repos &&
2589+
2590+
# Stage changes that include paths outside the sparse definition.
2591+
# Although the working tree differs between full and sparse checkouts
2592+
# after restore, the state of the index should be the same.
2593+
test_all_match git checkout -b restore-staged-2 base &&
2594+
test_all_match git reset --soft update-folder1 &&
2595+
test_sparse_match git restore --staged . &&
2596+
git -C full-checkout restore --staged . &&
2597+
test_all_match git ls-files -s -- folder1 &&
2598+
test_all_match git diff --cached -- folder1
2599+
'
2600+
2601+
test_expect_success 'restore --staged with wildcards' '
2602+
init_repos &&
2603+
2604+
test_all_match git checkout -b restore-staged-3 base &&
2605+
test_all_match git reset --soft update-deep &&
2606+
test_all_match git restore --staged "deep/*" &&
2607+
test_all_match git status --porcelain=v2 &&
2608+
test_all_match git diff --cached
2609+
'
2610+
2611+
test_expect_success 'sparse-index is expanded: restore --staged' '
2612+
init_repos &&
2613+
2614+
git -C sparse-index checkout -b restore-staged-exp base &&
2615+
git -C sparse-index reset --soft update-folder1 &&
2616+
ensure_expanded restore --staged .
2617+
'
2618+
2619+
test_expect_success 'sparse-index is expanded: restore --source --staged' '
2620+
init_repos &&
2621+
2622+
git -C sparse-index checkout -b restore-source-staged base &&
2623+
ensure_expanded restore --source update-folder1 --staged .
2624+
'
2625+
25762626
test_done

0 commit comments

Comments
 (0)