@@ -1849,6 +1849,46 @@ test_expect_success 'sparse index is not expanded: sparse-checkout' '
18491849 ensure_not_expanded sparse-checkout set
18501850'
18511851
1852+ # NEEDSWORK: although the full repository's index is _not_ expanded as part of
1853+ # stash, a temporary index, which is _not_ sparse, is created when stashing and
1854+ # applying a stash of untracked files. As a result, the test reports that it
1855+ # finds an instance of `ensure_full_index`, but it does not carry with it the
1856+ # performance implications of expanding the full repository index.
1857+ test_expect_success ' sparse index is not expanded: stash -u' '
1858+ init_repos &&
1859+
1860+ mkdir -p sparse-index/folder1 &&
1861+ echo >>sparse-index/README.md &&
1862+ echo >>sparse-index/a &&
1863+ echo >>sparse-index/folder1/new &&
1864+
1865+ GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
1866+ git -C sparse-index stash -u &&
1867+ test_region index ensure_full_index trace2.txt &&
1868+
1869+ GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
1870+ git -C sparse-index stash pop &&
1871+ test_region index ensure_full_index trace2.txt
1872+ '
1873+
1874+ # NEEDSWORK: similar to `git add`, untracked files outside of the sparse
1875+ # checkout definition are successfully stashed and unstashed.
1876+ test_expect_success ' stash -u outside sparse checkout definition' '
1877+ init_repos &&
1878+
1879+ write_script edit-contents <<-\EOF &&
1880+ echo text >>$1
1881+ EOF
1882+
1883+ run_on_sparse mkdir -p folder1 &&
1884+ run_on_all ../edit-contents folder1/new &&
1885+ test_all_match git stash -u &&
1886+ test_all_match git status --porcelain=v2 &&
1887+
1888+ test_all_match git stash pop -q &&
1889+ test_all_match git status --porcelain=v2
1890+ '
1891+
18521892# NEEDSWORK: a sparse-checkout behaves differently from a full checkout
18531893# in this scenario, but it shouldn't.
18541894test_expect_success ' reset mixed and checkout orphan' '
0 commit comments