]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t7519: rewrite sparse index test
authorDerrick Stolee <dstolee@microsoft.com>
Wed, 8 Sep 2021 01:42:25 +0000 (01:42 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 8 Sep 2021 05:41:09 +0000 (22:41 -0700)
The sparse index is tested with the FS Monitor hook and extension since
f8fe49e (fsmonitor: integrate with sparse index, 2021-07-14). This test
was very fragile because it shared an index across sparse and non-sparse
behavior. Since that expansion and contraction could cause the index to
lose its FS Monitor bitmap and token, behavior is fragile to changes in
'git sparse-checkout set'.

Rewrite the test to use two clones of the original repo: full and
sparse. This allows us to also keep the test files (actual, expect,
trace2.txt) out of the repos we are testing with 'git status'.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7519-status-fsmonitor.sh

index deea88d4431d230971f139196740218992f9dc54..f1463197b99c84555f9d6615cd8320f380217ad5 100755 (executable)
@@ -389,43 +389,47 @@ test_expect_success 'status succeeds after staging/unstaging' '
 # If "!" is supplied, then we verify that we do not call ensure_full_index
 # during a call to 'git status'. Otherwise, we verify that we _do_ call it.
 check_sparse_index_behavior () {
-       git status --porcelain=v2 >expect &&
-       git sparse-checkout init --cone --sparse-index &&
-       git sparse-checkout set dir1 dir2 &&
+       git -C full status --porcelain=v2 >expect &&
        GIT_TRACE2_EVENT="$(pwd)/trace2.txt" GIT_TRACE2_EVENT_NESTING=10 \
-               git status --porcelain=v2 >actual &&
+               git -C sparse status --porcelain=v2 >actual &&
        test_region $1 index ensure_full_index trace2.txt &&
        test_region fsm_hook query trace2.txt &&
        test_cmp expect actual &&
-       rm trace2.txt &&
-       git sparse-checkout disable
+       rm trace2.txt
 }
 
 test_expect_success 'status succeeds with sparse index' '
-       git reset --hard &&
+       git clone . full &&
+       git clone --sparse . sparse &&
+       git -C sparse sparse-checkout init --cone --sparse-index &&
+       git -C sparse sparse-checkout set dir1 dir2 &&
 
-       test_config core.fsmonitor "$TEST_DIRECTORY/t7519/fsmonitor-all" &&
-       check_sparse_index_behavior ! &&
-
-       write_script .git/hooks/fsmonitor-test<<-\EOF &&
+       write_script .git/hooks/fsmonitor-test <<-\EOF &&
                printf "last_update_token\0"
        EOF
-       git config core.fsmonitor .git/hooks/fsmonitor-test &&
+       git -C full config core.fsmonitor ../.git/hooks/fsmonitor-test &&
+       git -C sparse config core.fsmonitor ../.git/hooks/fsmonitor-test &&
        check_sparse_index_behavior ! &&
 
-       write_script .git/hooks/fsmonitor-test<<-\EOF &&
+       write_script .git/hooks/fsmonitor-test <<-\EOF &&
                printf "last_update_token\0"
                printf "dir1/modified\0"
        EOF
        check_sparse_index_behavior ! &&
 
-       cp -r dir1 dir1a &&
-       git add dir1a &&
-       git commit -m "add dir1a" &&
+       git -C sparse sparse-checkout add dir1a &&
+
+       for repo in full sparse
+       do
+               cp -r $repo/dir1 $repo/dir1a &&
+               git -C $repo add dir1a &&
+               git -C $repo commit -m "add dir1a" || return 1
+       done &&
+       git -C sparse sparse-checkout set dir1 dir2 &&
 
        # This one modifies outside the sparse-checkout definition
        # and hence we expect to expand the sparse-index.
-       write_script .git/hooks/fsmonitor-test<<-\EOF &&
+       write_script .git/hooks/fsmonitor-test <<-\EOF &&
                printf "last_update_token\0"
                printf "dir1a/modified\0"
        EOF