From: Derrick Stolee <dstolee@xxxxxxxxxxxxx> During the effort to protect uses of the index to operate on a full index, we did not modify fsmonitor.c. This is because it already works effectively with only the change to index_name_stage_pos(). The only thing left to do is to test that it works correctly. These tests are added to demonstrate that the behavior is the same across a full index and a sparse index, but also that file modifications to a tracked directory outside of the sparse cone will trigger ensure_full_index(). Signed-off-by: Derrick Stolee <dstolee@xxxxxxxxxxxxx> --- t/t7519-status-fsmonitor.sh | 48 +++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/t/t7519-status-fsmonitor.sh b/t/t7519-status-fsmonitor.sh index 23879d967297..306157d48abf 100755 --- a/t/t7519-status-fsmonitor.sh +++ b/t/t7519-status-fsmonitor.sh @@ -78,6 +78,7 @@ test_expect_success 'setup' ' expect* actual* marker* + trace2* EOF ' @@ -400,4 +401,51 @@ test_expect_success 'status succeeds after staging/unstaging' ' ) ' +test_expect_success 'status succeeds with sparse index' ' + test_config core.fsmonitor "$TEST_DIRECTORY/t7519/fsmonitor-all" && + git status --porcelain=v2 >expect && + git sparse-checkout init --cone --sparse-index && + GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \ + git status --porcelain=v2 >actual && + test_region ! index ensure_full_index trace2.txt && + test_cmp expect actual && + rm trace2.txt && + + write_script .git/hooks/fsmonitor-test<<-\EOF && + printf "last_update_token\0" + EOF + git config core.fsmonitor .git/hooks/fsmonitor-test && + git status --porcelain=v2 >expect && + git sparse-checkout init --cone --sparse-index && + GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \ + git status --porcelain=v2 >actual && + test_region ! index ensure_full_index trace2.txt && + test_cmp expect actual && + rm trace2.txt && + + write_script .git/hooks/fsmonitor-test<<-\EOF && + printf "last_update_token\0" + printf "dir1/modified\0" + EOF + git config core.fsmonitor .git/hooks/fsmonitor-test && + git status --porcelain=v2 >expect && + git sparse-checkout init --cone --sparse-index && + GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \ + git status --porcelain=v2 >actual && + test_region ! index ensure_full_index trace2.txt && + test_cmp expect actual && + + write_script .git/hooks/fsmonitor-test<<-\EOF && + printf "last_update_token\0" + printf "dir1a/modified\0" + EOF + git config core.fsmonitor .git/hooks/fsmonitor-test && + git status --porcelain=v2 >expect && + git sparse-checkout init --cone --sparse-index && + GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \ + git status --porcelain=v2 >actual && + test_region index ensure_full_index trace2.txt && + test_cmp expect actual +' + test_done -- gitgitgadget