(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id:Id.Lit_Chars val:'sparse checkout tests\n' span_id:6) (Token id:Id.Lit_Chars val:'\n' span_id:7) (Token id:Id.Lit_Chars val:'* (tag: removed, master) removed\n' span_id:8) (Token id:Id.Lit_Chars val:'| D\tsub/added\n' span_id:9) (Token id:Id.Lit_Chars val:'* (HEAD, tag: top) modified and added\n' span_id:10) (Token id:Id.Lit_Chars val:'| M\tinit.t\n' span_id:11) (Token id:Id.Lit_Chars val:'| A\tsub/added\n' span_id:12) (Token id:Id.Lit_Chars val:'* (tag: init) init\n' span_id:13) (Token id:Id.Lit_Chars val:' A\tinit.t\n' span_id:14) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-read-tree.sh)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:33))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:37) (Token id:Id.Lit_Chars val:'\tcat >expected <<-EOF &&\n' span_id:38) (Token id: Id.Lit_Chars val: '\t100644 77f0ba1734ed79d12881f81b36ee134de6a3327b 0\tinit.t\n' span_id: 39 ) (Token id:Id.Lit_Chars val:'\t100644 $EMPTY_BLOB 0\tsub/added\n' span_id:40) (Token id:Id.Lit_Chars val:'\t100644 $EMPTY_BLOB 0\tsub/addedtoo\n' span_id:41) (Token id:Id.Lit_Chars val:'\t100644 $EMPTY_BLOB 0\tsubsub/added\n' span_id:42) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:43) (Token id:Id.Lit_Chars val:'\tcat >expected.swt <<-\\EOF &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\tH init.t\n' span_id:45) (Token id:Id.Lit_Chars val:'\tH sub/added\n' span_id:46) (Token id:Id.Lit_Chars val:'\tH sub/addedtoo\n' span_id:47) (Token id:Id.Lit_Chars val:'\tH subsub/added\n' span_id:48) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:49) (Token id:Id.Lit_Chars val:'\n' span_id:50) (Token id:Id.Lit_Chars val:'\ttest_commit init &&\n' span_id:51) (Token id:Id.Lit_Chars val:'\techo modified >>init.t &&\n' span_id:52) (Token id:Id.Lit_Chars val:'\tmkdir sub subsub &&\n' span_id:53) (Token id:Id.Lit_Chars val:'\ttouch sub/added sub/addedtoo subsub/added &&\n' span_id:54) (Token id: Id.Lit_Chars val: '\tgit add init.t sub/added sub/addedtoo subsub/added &&\n' span_id: 55 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "modified and added" &&\n' span_id:56) (Token id:Id.Lit_Chars val:'\tgit tag top &&\n' span_id:57) (Token id:Id.Lit_Chars val:'\tgit rm sub/added &&\n' span_id:58) (Token id:Id.Lit_Chars val:'\tgit commit -m removed &&\n' span_id:59) (Token id:Id.Lit_Chars val:'\tgit tag removed &&\n' span_id:60) (Token id:Id.Lit_Chars val:'\tgit checkout top &&\n' span_id:61) (Token id:Id.Lit_Chars val:'\tgit ls-files --stage >result &&\n' span_id:62) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:63) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'read-tree without .git/info/sparse-checkout' span_id:70))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:74) (Token id: Id.Lit_Chars val: '\tread_tree_u_must_succeed -m -u HEAD &&\n' span_id: 75 ) (Token id:Id.Lit_Chars val:'\tgit ls-files --stage >result &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\tgit ls-files -t >result &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.swt result\n' span_id:79) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'read-tree with .git/info/sparse-checkout but disabled' span_id: 86 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:90) (Token id:Id.Lit_Chars val:'\techo >.git/info/sparse-checkout &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u HEAD &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\tgit ls-files -t >result &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.swt result &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\ttest -f init.t &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\ttest -f sub/added\n' span_id:96) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'read-tree --no-sparse-checkout with empty .git/info/sparse-checkout and enabled' span_id: 103 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:107) (Token id: Id.Lit_Chars val: '\tgit config core.sparsecheckout true &&\n' span_id: 108 ) (Token id:Id.Lit_Chars val:'\techo >.git/info/sparse-checkout &&\n' span_id:109) (Token id: Id.Lit_Chars val: '\tread_tree_u_must_succeed --no-sparse-checkout -m -u HEAD &&\n' span_id: 110 ) (Token id:Id.Lit_Chars val:'\tgit ls-files -t >result &&\n' span_id:111) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.swt result &&\n' span_id:112) (Token id:Id.Lit_Chars val:'\ttest -f init.t &&\n' span_id:113) (Token id:Id.Lit_Chars val:'\ttest -f sub/added\n' span_id:114) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'read-tree with empty .git/info/sparse-checkout' span_id:121))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:125) (Token id: Id.Lit_Chars val: '\tgit config core.sparsecheckout true &&\n' span_id: 126 ) (Token id:Id.Lit_Chars val:'\techo >.git/info/sparse-checkout &&\n' span_id:127) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_fail -m -u HEAD &&\n' span_id:128) (Token id:Id.Lit_Chars val:'\tgit ls-files --stage >result &&\n' span_id:129) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result &&\n' span_id:130) (Token id:Id.Lit_Chars val:'\tgit ls-files -t >result &&\n' span_id:131) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.swt result &&\n' span_id:132) (Token id:Id.Lit_Chars val:'\ttest -f init.t &&\n' span_id:133) (Token id:Id.Lit_Chars val:'\ttest -f sub/added\n' span_id:134) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'match directories with trailing slash' span_id:141))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:145) (Token id: Id.Lit_Chars val: '\tcat >expected.swt-noinit <<-\\EOF &&\n' span_id: 146 ) (Token id:Id.Lit_Chars val:'\tS init.t\n' span_id:147) (Token id:Id.Lit_Chars val:'\tH sub/added\n' span_id:148) (Token id:Id.Lit_Chars val:'\tH sub/addedtoo\n' span_id:149) (Token id:Id.Lit_Chars val:'\tS subsub/added\n' span_id:150) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:151) (Token id:Id.Lit_Chars val:'\n' span_id:152) (Token id: Id.Lit_Chars val: '\techo sub/ > .git/info/sparse-checkout &&\n' span_id: 153 ) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u HEAD &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\tgit ls-files -t > result &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.swt-noinit result &&\n' span_id:156) (Token id:Id.Lit_Chars val:'\ttest ! -f init.t &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\ttest -f sub/added\n' span_id:158) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'match directories without trailing slash' span_id:165))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:169) (Token id: Id.Lit_Chars val: '\techo sub >.git/info/sparse-checkout &&\n' span_id: 170 ) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u HEAD &&\n' span_id:171) (Token id:Id.Lit_Chars val:'\tgit ls-files -t >result &&\n' span_id:172) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.swt-noinit result &&\n' span_id:173) (Token id:Id.Lit_Chars val:'\ttest ! -f init.t &&\n' span_id:174) (Token id:Id.Lit_Chars val:'\ttest -f sub/added\n' span_id:175) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'match directories with negated patterns' span_id:182))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:186) (Token id: Id.Lit_Chars val: '\tcat >expected.swt-negation <<\\EOF &&\n' span_id: 187 ) (Token id:Id.Lit_Chars val:'S init.t\n' span_id:188) (Token id:Id.Lit_Chars val:'S sub/added\n' span_id:189) (Token id:Id.Lit_Chars val:'H sub/addedtoo\n' span_id:190) (Token id:Id.Lit_Chars val:'S subsub/added\n' span_id:191) (Token id:Id.Lit_Chars val:'EOF\n' span_id:192) (Token id:Id.Lit_Chars val:'\n' span_id:193) (Token id: Id.Lit_Chars val: '\tcat >.git/info/sparse-checkout <<\\EOF &&\n' span_id: 194 ) (Token id:Id.Lit_Chars val:'sub\n' span_id:195) (Token id:Id.Lit_Chars val:'!sub/added\n' span_id:196) (Token id:Id.Lit_Chars val:'EOF\n' span_id:197) (Token id:Id.Lit_Chars val:'\tgit read-tree -m -u HEAD &&\n' span_id:198) (Token id:Id.Lit_Chars val:'\tgit ls-files -t >result &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.swt-negation result &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\ttest ! -f init.t &&\n' span_id:201) (Token id:Id.Lit_Chars val:'\ttest ! -f sub/added &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\ttest -f sub/addedtoo\n' span_id:203) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'match directories with negated patterns (2)' span_id:210))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:214) (Token id: Id.Lit_Chars val: '\tcat >expected.swt-negation2 <<\\EOF &&\n' span_id: 215 ) (Token id:Id.Lit_Chars val:'H init.t\n' span_id:216) (Token id:Id.Lit_Chars val:'H sub/added\n' span_id:217) (Token id:Id.Lit_Chars val:'S sub/addedtoo\n' span_id:218) (Token id:Id.Lit_Chars val:'H subsub/added\n' span_id:219) (Token id:Id.Lit_Chars val:'EOF\n' span_id:220) (Token id:Id.Lit_Chars val:'\n' span_id:221) (Token id: Id.Lit_Chars val: '\tcat >.git/info/sparse-checkout <<\\EOF &&\n' span_id: 222 ) (Token id:Id.Lit_Chars val:'/*\n' span_id:223) (Token id:Id.Lit_Chars val:'!sub\n' span_id:224) (Token id:Id.Lit_Chars val:'sub/added\n' span_id:225) (Token id:Id.Lit_Chars val:'EOF\n' span_id:226) (Token id:Id.Lit_Chars val:'\tgit read-tree -m -u HEAD &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\tgit ls-files -t >result &&\n' span_id:228) (Token id: Id.Lit_Chars val: '\ttest_cmp expected.swt-negation2 result &&\n' span_id: 229 ) (Token id:Id.Lit_Chars val:'\ttest -f init.t &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\ttest -f sub/added &&\n' span_id:231) (Token id:Id.Lit_Chars val:'\ttest ! -f sub/addedtoo\n' span_id:232) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'match directory pattern' span_id:239))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:243) (Token id: Id.Lit_Chars val: '\techo "s?b" >.git/info/sparse-checkout &&\n' span_id: 244 ) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u HEAD &&\n' span_id:245) (Token id:Id.Lit_Chars val:'\tgit ls-files -t >result &&\n' span_id:246) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.swt-noinit result &&\n' span_id:247) (Token id:Id.Lit_Chars val:'\ttest ! -f init.t &&\n' span_id:248) (Token id:Id.Lit_Chars val:'\ttest -f sub/added\n' span_id:249) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout area changes' span_id:256))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:260) (Token id:Id.Lit_Chars val:'\tcat >expected.swt-nosub <<-\\EOF &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\tH init.t\n' span_id:262) (Token id:Id.Lit_Chars val:'\tS sub/added\n' span_id:263) (Token id:Id.Lit_Chars val:'\tS sub/addedtoo\n' span_id:264) (Token id:Id.Lit_Chars val:'\tS subsub/added\n' span_id:265) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:266) (Token id:Id.Lit_Chars val:'\n' span_id:267) (Token id: Id.Lit_Chars val: '\techo init.t >.git/info/sparse-checkout &&\n' span_id: 268 ) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u HEAD &&\n' span_id:269) (Token id:Id.Lit_Chars val:'\tgit ls-files -t >result &&\n' span_id:270) (Token id:Id.Lit_Chars val:'\ttest_cmp expected.swt-nosub result &&\n' span_id:271) (Token id:Id.Lit_Chars val:'\ttest -f init.t &&\n' span_id:272) (Token id:Id.Lit_Chars val:'\ttest ! -f sub/added\n' span_id:273) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'read-tree updates worktree, absent case' span_id:280))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:284) (Token id: Id.Lit_Chars val: '\techo sub/added >.git/info/sparse-checkout &&\n' span_id: 285 ) (Token id:Id.Lit_Chars val:'\tgit checkout -f top &&\n' span_id:286) (Token id: Id.Lit_Chars val: '\tread_tree_u_must_succeed -m -u HEAD^ &&\n' span_id: 287 ) (Token id:Id.Lit_Chars val:'\ttest ! -f init.t\n' span_id:288) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'read-tree updates worktree, dirty case' span_id:295))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:299) (Token id: Id.Lit_Chars val: '\techo sub/added >.git/info/sparse-checkout &&\n' span_id: 300 ) (Token id:Id.Lit_Chars val:'\tgit checkout -f top &&\n' span_id:301) (Token id:Id.Lit_Chars val:'\techo dirty >init.t &&\n' span_id:302) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u HEAD^ &&\n' span_id:303) (Token id:Id.Lit_Chars val:'\tgrep -q dirty init.t &&\n' span_id:304) (Token id:Id.Lit_Chars val:'\trm init.t\n' span_id:305) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'read-tree removes worktree, dirty case' span_id:312))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:316) (Token id: Id.Lit_Chars val: '\techo init.t >.git/info/sparse-checkout &&\n' span_id: 317 ) (Token id:Id.Lit_Chars val:'\tgit checkout -f top &&\n' span_id:318) (Token id:Id.Lit_Chars val:'\techo dirty >added &&\n' span_id:319) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u HEAD^ &&\n' span_id:320) (Token id:Id.Lit_Chars val:'\tgrep -q dirty added\n' span_id:321) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'read-tree adds to worktree, absent case' span_id:328))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:332) (Token id: Id.Lit_Chars val: '\techo init.t >.git/info/sparse-checkout &&\n' span_id: 333 ) (Token id:Id.Lit_Chars val:'\tgit checkout -f removed &&\n' span_id:334) (Token id: Id.Lit_Chars val: '\tread_tree_u_must_succeed -u -m HEAD^ &&\n' span_id: 335 ) (Token id:Id.Lit_Chars val:'\ttest ! -f sub/added\n' span_id:336) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'read-tree adds to worktree, dirty case' span_id:343))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:347) (Token id: Id.Lit_Chars val: '\techo init.t >.git/info/sparse-checkout &&\n' span_id: 348 ) (Token id:Id.Lit_Chars val:'\tgit checkout -f removed &&\n' span_id:349) (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:350) (Token id:Id.Lit_Chars val:'\techo dirty >sub/added &&\n' span_id:351) (Token id: Id.Lit_Chars val: '\tread_tree_u_must_succeed -u -m HEAD^ &&\n' span_id: 352 ) (Token id:Id.Lit_Chars val:'\tgrep -q dirty sub/added\n' span_id:353) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'index removal and worktree narrowing at the same time' span_id: 360 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:364) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\techo init.t >.git/info/sparse-checkout &&\n' span_id:366) (Token id: Id.Lit_Chars val: '\techo sub/added >>.git/info/sparse-checkout &&\n' span_id: 367 ) (Token id:Id.Lit_Chars val:'\tgit checkout -f top &&\n' span_id:368) (Token id: Id.Lit_Chars val: '\techo init.t >.git/info/sparse-checkout &&\n' span_id: 369 ) (Token id:Id.Lit_Chars val:'\tgit checkout removed &&\n' span_id:370) (Token id:Id.Lit_Chars val:'\tgit ls-files sub/added >result &&\n' span_id:371) (Token id:Id.Lit_Chars val:'\ttest ! -f sub/added &&\n' span_id:372) (Token id:Id.Lit_Chars val:'\ttest_cmp empty result\n' span_id:373) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'read-tree --reset removes outside worktree' span_id:380))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:384) (Token id:Id.Lit_Chars val:'\t>empty &&\n' span_id:385) (Token id:Id.Lit_Chars val:'\techo init.t >.git/info/sparse-checkout &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\tgit checkout -f top &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\tgit reset --hard removed &&\n' span_id:388) (Token id:Id.Lit_Chars val:'\tgit ls-files sub/added >result &&\n' span_id:389) (Token id:Id.Lit_Chars val:'\ttest_cmp empty result\n' span_id:390) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'print errors when failed to update worktree' span_id:397))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:401) (Token id: Id.Lit_Chars val: '\techo sub >.git/info/sparse-checkout &&\n' span_id: 402 ) (Token id:Id.Lit_Chars val:'\tgit checkout -f init &&\n' span_id:403) (Token id:Id.Lit_Chars val:'\tmkdir sub &&\n' span_id:404) (Token id:Id.Lit_Chars val:'\ttouch sub/added sub/addedtoo &&\n' span_id:405) (Token id: Id.Lit_Chars val: '\ttest_must_fail git checkout top 2>actual &&\n' span_id: 406 ) (Token id:Id.Lit_Chars val:'\tcat >expected <<\\EOF &&\n' span_id:407) (Token id: Id.Lit_Chars val: 'error: The following untracked working tree files would be overwritten by checkout:\n' span_id: 408 ) (Token id:Id.Lit_Chars val:'\tsub/added\n' span_id:409) (Token id:Id.Lit_Chars val:'\tsub/addedtoo\n' span_id:410) (Token id:Id.Lit_Chars val:'Please move or remove them before you switch branches.\n' span_id:411) (Token id:Id.Lit_Chars val:'Aborting\n' span_id:412) (Token id:Id.Lit_Chars val:'EOF\n' span_id:413) (Token id:Id.Lit_Chars val:'\ttest_i18ncmp expected actual\n' span_id:414) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout without --ignore-skip-worktree-bits' span_id:421))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:425) (Token id: Id.Lit_Chars val: '\techo "*" >.git/info/sparse-checkout &&\n' span_id: 426 ) (Token id:Id.Lit_Chars val:'\tgit checkout -f top &&\n' span_id:427) (Token id:Id.Lit_Chars val:'\ttest_path_is_file init.t &&\n' span_id:428) (Token id:Id.Lit_Chars val:'\techo sub >.git/info/sparse-checkout &&\n' span_id:429) (Token id:Id.Lit_Chars val:'\tgit checkout &&\n' span_id:430) (Token id:Id.Lit_Chars val:'\techo modified >> sub/added &&\n' span_id:431) (Token id:Id.Lit_Chars val:'\tgit checkout . &&\n' span_id:432) (Token id:Id.Lit_Chars val:'\ttest_path_is_missing init.t &&\n' span_id:433) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code HEAD\n' span_id:434) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout with --ignore-skip-worktree-bits' span_id:441))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:445) (Token id: Id.Lit_Chars val: '\techo "*" >.git/info/sparse-checkout &&\n' span_id: 446 ) (Token id:Id.Lit_Chars val:'\tgit checkout -f top &&\n' span_id:447) (Token id:Id.Lit_Chars val:'\ttest_path_is_file init.t &&\n' span_id:448) (Token id:Id.Lit_Chars val:'\techo sub >.git/info/sparse-checkout &&\n' span_id:449) (Token id:Id.Lit_Chars val:'\tgit checkout &&\n' span_id:450) (Token id:Id.Lit_Chars val:'\techo modified >> sub/added &&\n' span_id:451) (Token id: Id.Lit_Chars val: '\tgit checkout --ignore-skip-worktree-bits . &&\n' span_id: 452 ) (Token id:Id.Lit_Chars val:'\ttest_path_is_file init.t &&\n' span_id:453) (Token id:Id.Lit_Chars val:'\tgit diff --exit-code HEAD\n' span_id:454) ) } ) (C {(test_done)}) ] )