(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:'git ls-files --others --exclude\n' span_id:15) (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id: Id.Lit_Chars val: 'This test runs git ls-files --others and tests --exclude patterns.\n' span_id: 17 ) ) } spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(rm)} {(-fr)} {(one)} {(three)}) (command.ForEach iter_name: dir iter_words: [{(.)} {(one)} {(one/two)} {(three)}] do_arg_iter: F body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(mkdir)} {(-p)} {($ Id.VSub_DollarName '$dir')}) (command.ForEach iter_name: i iter_words: [{(1)} {(2)} {(3)} {(4)} {(5)} {(6)} {(7)} {(8)}] do_arg_iter: F body: (command.DoGroup children: [ (command.Simple redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:86) fd: -1 arg_word: {($ Id.VSub_DollarName '$dir') (/a.) ($ Id.VSub_DollarName '$i')} ) ] ) ] ) ) ] ) ] ) ) (command.Simple redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:96) fd: -1 arg_word: {(DQ ('#ignore1'))} ) ] ) (command.Simple redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:101) fd: -1 arg_word: {(DQ ('#ignore2'))} ) ] ) (command.Simple redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:106) fd: -1 arg_word: {(DQ ('#hidden'))} ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:114) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:117) fd: -1 here_begin: {(EOF)} here_end_span_id: 139 stdin_parts: [ ('a.2\n') ('a.4\n') ('a.5\n') ('a.8\n') ('one/a.3\n') ('one/a.4\n') ('one/a.5\n') ('one/a.7\n') ('one/two/a.2\n') ('one/two/a.3\n') ('one/two/a.5\n') ('one/two/a.7\n') ('one/two/a.8\n') ('three/a.2\n') ('three/a.3\n') ('three/a.4\n') ('three/a.5\n') ('three/a.8\n') ] ) ] ) (command.Simple words: [ {(echo)} { (SQ (Token id:Id.Lit_Chars val:'.gitignore\n' span_id:144) (Token id:Id.Lit_Chars val:'\\#ignore1\n' span_id:145) (Token id:Id.Lit_Chars val:'\\#ignore2*\n' span_id:146) (Token id:Id.Lit_Chars val:'\\#hid*n\n' span_id:147) (Token id:Id.Lit_Chars val:'output\n' span_id:148) (Token id:Id.Lit_Chars val:'expect\n' span_id:149) (Token id:Id.Lit_Chars val:'.gitignore\n' span_id:150) (Token id:Id.Lit_Chars val:'*.7\n' span_id:151) (Token id:Id.Lit_Chars val:'!*.8' span_id:152) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:155) fd: -1 arg_word: {(.git/ignore)} ) ] ) (command.Simple words: [ {(echo)} { (SQ (Token id:Id.Lit_Chars val:'*.1\n' span_id:162) (Token id:Id.Lit_Chars val:'/*.3\n' span_id:163) (Token id:Id.Lit_Chars val:'!*.6' span_id:164) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:167) fd: -1 arg_word: {(.gitignore)} ) ] ) (command.Simple words: [ {(echo)} { (SQ (Token id:Id.Lit_Chars val:'*.2\n' span_id:173) (Token id:Id.Lit_Chars val:'two/*.4\n' span_id:174) (Token id:Id.Lit_Chars val:'!*.7\n' span_id:175) (Token id:Id.Lit_Chars val:'*.8' span_id:176) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:179) fd: -1 arg_word: {(one/.gitignore)} ) ] ) (command.Simple words: [ {(echo)} { (SQ (Token id:Id.Lit_Chars val:'!*.2\n' span_id:185) (Token id:Id.Lit_Chars val:'!*.8' span_id:186) ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:189) fd: -1 arg_word: {(one/two/.gitignore)} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:allignores) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: '.gitignore one/.gitignore one/two/.gitignore' span_id: 195 ) ) } spids: [193] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'git ls-files --others with various exclude options.' span_id: 204 ) ) } { (SQ (Token id:Id.Lit_Chars val:'git ls-files --others \\\n' span_id:210) (Token id:Id.Lit_Chars val:' --exclude=\\*.6 \\\n' span_id:211) (Token id:Id.Lit_Chars val:' --exclude-per-directory=.gitignore \\\n' span_id:212) (Token id:Id.Lit_Chars val:' --exclude-from=.git/ignore \\\n' span_id:213) (Token id:Id.Lit_Chars val:' >output &&\n' span_id:214) (Token id:Id.Lit_Chars val:' test_cmp expect output' span_id:215) ) } ) (command.Simple words: [{(printf)} {(SQ (Token id:Id.Lit_Chars val:'*.1\\r\\n/*.3\\r\\n!*.6\\r\\n' span_id:225))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:228) fd: -1 arg_word: {(.gitignore)} ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git ls-files --others with \\r\\n line endings.' span_id:237))} { (SQ (Token id:Id.Lit_Chars val:'git ls-files --others \\\n' span_id:243) (Token id:Id.Lit_Chars val:' --exclude=\\*.6 \\\n' span_id:244) (Token id:Id.Lit_Chars val:' --exclude-per-directory=.gitignore \\\n' span_id:245) (Token id:Id.Lit_Chars val:' --exclude-from=.git/ignore \\\n' span_id:246) (Token id:Id.Lit_Chars val:' >output &&\n' span_id:247) (Token id:Id.Lit_Chars val:' test_cmp expect output' span_id:248) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup skip-worktree gitignore' span_id:255))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:259) (Token id:Id.Lit_Chars val:'\tgit add $allignores &&\n' span_id:260) (Token id:Id.Lit_Chars val:'\tgit update-index --skip-worktree $allignores &&\n' span_id:261) (Token id:Id.Lit_Chars val:'\trm $allignores\n' span_id:262) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'git ls-files --others with various exclude options.' span_id: 271 ) ) } { (SQ (Token id:Id.Lit_Chars val:'git ls-files --others \\\n' span_id:277) (Token id:Id.Lit_Chars val:' --exclude=\\*.6 \\\n' span_id:278) (Token id:Id.Lit_Chars val:' --exclude-per-directory=.gitignore \\\n' span_id:279) (Token id:Id.Lit_Chars val:' --exclude-from=.git/ignore \\\n' span_id:280) (Token id:Id.Lit_Chars val:' >output &&\n' span_id:281) (Token id:Id.Lit_Chars val:' test_cmp expect output' span_id:282) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'restore gitignore' span_id:289))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:293) (Token id: Id.Lit_Chars val: '\tgit checkout --ignore-skip-worktree-bits $allignores &&\n' span_id: 294 ) (Token id:Id.Lit_Chars val:'\trm .git/index\n' span_id:295) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:301) fd: -1 arg_word: {(excludes-file)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:305) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:306)) (OF) } here_end_span_id: 312 stdin_parts: [('*.[1-8]\n') ('e*\n') ('\\#*\n')] ) ] ) (C {(git)} {(config)} {(core.excludesFile)} {(excludes-file)}) (command.Pipeline children: [ (C {(git)} {(-c)} {(status.displayCommentPrefix) (Id.Lit_Equals '=') (true)} {(status)}) (command.Simple words: [{(grep)} {(DQ ('^#\t'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:341) fd: -1 arg_word: {(output)} ) ] ) ] negated: F ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:348) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:352) fd: -1 here_begin: {(EOF)} here_end_span_id: 362 stdin_parts: [('#\t.gitignore\n') ('#\ta.6\n') ('#\tone/\n') ('#\toutput\n') ('#\tthree/\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git status honors core.excludesfile' span_id:367))} {(SQ (Token id:Id.Lit_Chars val:'test_cmp expect output' span_id:373))} ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'trailing slash in exclude allows directory match(1)' span_id: 380 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:384) (Token id:Id.Lit_Chars val:'\n' span_id:385) (Token id: Id.Lit_Chars val: '\tgit ls-files --others --exclude=one/ >output &&\n' span_id: 386 ) (Token id:Id.Lit_Chars val:'\tif grep "^one/" output\n' span_id:387) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:388) (Token id:Id.Lit_Chars val:'\t\techo Ooops\n' span_id:389) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:390) (Token id:Id.Lit_Chars val:'\telse\n' span_id:391) (Token id:Id.Lit_Chars val:'\t\t: happy\n' span_id:392) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:393) (Token id:Id.Lit_Chars val:'\n' span_id:394) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'trailing slash in exclude allows directory match (2)' span_id: 401 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:405) (Token id:Id.Lit_Chars val:'\n' span_id:406) (Token id: Id.Lit_Chars val: '\tgit ls-files --others --exclude=one/two/ >output &&\n' span_id: 407 ) (Token id:Id.Lit_Chars val:'\tif grep "^one/two/" output\n' span_id:408) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:409) (Token id:Id.Lit_Chars val:'\t\techo Ooops\n' span_id:410) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:411) (Token id:Id.Lit_Chars val:'\telse\n' span_id:412) (Token id:Id.Lit_Chars val:'\t\t: happy\n' span_id:413) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:414) (Token id:Id.Lit_Chars val:'\n' span_id:415) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'trailing slash in exclude forces directory match (1)' span_id: 422 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:426) (Token id:Id.Lit_Chars val:'\n' span_id:427) (Token id:Id.Lit_Chars val:'\t>two &&\n' span_id:428) (Token id:Id.Lit_Chars val:'\tgit ls-files --others --exclude=two/ >output &&\n' span_id:429) (Token id:Id.Lit_Chars val:'\tgrep "^two" output\n' span_id:430) (Token id:Id.Lit_Chars val:'\n' span_id:431) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'trailing slash in exclude forces directory match (2)' span_id: 438 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:442) (Token id:Id.Lit_Chars val:'\n' span_id:443) (Token id: Id.Lit_Chars val: '\tgit ls-files --others --exclude=one/a.1/ >output &&\n' span_id: 444 ) (Token id:Id.Lit_Chars val:'\tgrep "^one/a.1" output\n' span_id:445) (Token id:Id.Lit_Chars val:'\n' span_id:446) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'negated exclude matches can override previous ones' span_id: 453 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:457) (Token id:Id.Lit_Chars val:'\n' span_id:458) (Token id: Id.Lit_Chars val: '\tgit ls-files --others --exclude="a.*" --exclude="!a.1" >output &&\n' span_id: 459 ) (Token id:Id.Lit_Chars val:'\tgrep "^a.1" output\n' span_id:460) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'excluded directory overrides content patterns' span_id:467))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:471) (Token id:Id.Lit_Chars val:'\n' span_id:472) (Token id: Id.Lit_Chars val: '\tgit ls-files --others --exclude="one" --exclude="!one/a.1" >output &&\n' span_id: 473 ) (Token id:Id.Lit_Chars val:'\tif grep "^one/a.1" output\n' span_id:474) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:475) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:476) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:477) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'negated directory doesn' span_id:484)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:486)) (SQ (Token id:Id.Lit_Chars val:'t affect content patterns' span_id:488)) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:492) (Token id:Id.Lit_Chars val:'\n' span_id:493) (Token id: Id.Lit_Chars val: '\tgit ls-files --others --exclude="!one" --exclude="one/a.1" >output &&\n' span_id: 494 ) (Token id:Id.Lit_Chars val:'\tif grep "^one/a.1" output\n' span_id:495) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:496) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:497) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:498) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'subdirectory ignore (setup)' span_id:505))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:509) (Token id:Id.Lit_Chars val:'\tmkdir -p top/l1/l2 &&\n' span_id:510) (Token id:Id.Lit_Chars val:'\t(\n' span_id:511) (Token id:Id.Lit_Chars val:'\t\tcd top &&\n' span_id:512) (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:513) (Token id:Id.Lit_Chars val:'\t\techo /.gitignore >.gitignore &&\n' span_id:514) (Token id:Id.Lit_Chars val:'\t\techo l1 >>.gitignore &&\n' span_id:515) (Token id:Id.Lit_Chars val:'\t\techo l2 >l1/.gitignore &&\n' span_id:516) (Token id:Id.Lit_Chars val:'\t\t>l1/l2/l1\n' span_id:517) (Token id:Id.Lit_Chars val:'\t)\n' span_id:518) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'subdirectory ignore (toplevel)' span_id:525))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:529) (Token id:Id.Lit_Chars val:'\t(\n' span_id:530) (Token id:Id.Lit_Chars val:'\t\tcd top &&\n' span_id:531) (Token id: Id.Lit_Chars val: '\t\tgit ls-files -o --exclude-standard\n' span_id: 532 ) (Token id:Id.Lit_Chars val:'\t) >actual &&\n' span_id:533) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:534) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:535) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'subdirectory ignore (l1/l2)' span_id:542))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:546) (Token id:Id.Lit_Chars val:'\t(\n' span_id:547) (Token id:Id.Lit_Chars val:'\t\tcd top/l1/l2 &&\n' span_id:548) (Token id: Id.Lit_Chars val: '\t\tgit ls-files -o --exclude-standard\n' span_id: 549 ) (Token id:Id.Lit_Chars val:'\t) >actual &&\n' span_id:550) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:551) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:552) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'subdirectory ignore (l1)' span_id:559))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:563) (Token id:Id.Lit_Chars val:'\t(\n' span_id:564) (Token id:Id.Lit_Chars val:'\t\tcd top/l1 &&\n' span_id:565) (Token id: Id.Lit_Chars val: '\t\tgit ls-files -o --exclude-standard\n' span_id: 566 ) (Token id:Id.Lit_Chars val:'\t) >actual &&\n' span_id:567) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:568) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:569) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'show/hide empty ignored directory (setup)' span_id:576))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:580) (Token id:Id.Lit_Chars val:'\trm top/l1/l2/l1 &&\n' span_id:581) (Token id:Id.Lit_Chars val:'\trm top/l1/.gitignore\n' span_id:582) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'show empty ignored directory with --directory' span_id:589))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:593) (Token id:Id.Lit_Chars val:'\t(\n' span_id:594) (Token id:Id.Lit_Chars val:'\t\tcd top &&\n' span_id:595) (Token id: Id.Lit_Chars val: '\t\tgit ls-files -o -i --exclude l1 --directory\n' span_id: 596 ) (Token id:Id.Lit_Chars val:'\t) >actual &&\n' span_id:597) (Token id:Id.Lit_Chars val:'\techo l1/ >expect &&\n' span_id:598) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:599) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'hide empty ignored directory with --no-empty-directory' span_id: 606 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:610) (Token id:Id.Lit_Chars val:'\t(\n' span_id:611) (Token id:Id.Lit_Chars val:'\t\tcd top &&\n' span_id:612) (Token id: Id.Lit_Chars val: '\t\tgit ls-files -o -i --exclude l1 --directory --no-empty-directory\n' span_id: 613 ) (Token id:Id.Lit_Chars val:'\t) >actual &&\n' span_id:614) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:615) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:616) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'show/hide empty ignored sub-directory (setup)' span_id:623))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:627) (Token id:Id.Lit_Chars val:'\t> top/l1/tracked &&\n' span_id:628) (Token id:Id.Lit_Chars val:'\t(\n' span_id:629) (Token id:Id.Lit_Chars val:'\t\tcd top &&\n' span_id:630) (Token id:Id.Lit_Chars val:'\t\tgit add -f l1/tracked\n' span_id:631) (Token id:Id.Lit_Chars val:'\t)\n' span_id:632) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'show empty ignored sub-directory with --directory' span_id: 639 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:643) (Token id:Id.Lit_Chars val:'\t(\n' span_id:644) (Token id:Id.Lit_Chars val:'\t\tcd top &&\n' span_id:645) (Token id: Id.Lit_Chars val: '\t\tgit ls-files -o -i --exclude l1 --directory\n' span_id: 646 ) (Token id:Id.Lit_Chars val:'\t) >actual &&\n' span_id:647) (Token id:Id.Lit_Chars val:'\techo l1/l2/ >expect &&\n' span_id:648) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:649) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'hide empty ignored sub-directory with --no-empty-directory' span_id: 656 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:660) (Token id:Id.Lit_Chars val:'\t(\n' span_id:661) (Token id:Id.Lit_Chars val:'\t\tcd top &&\n' span_id:662) (Token id: Id.Lit_Chars val: '\t\tgit ls-files -o -i --exclude l1 --directory --no-empty-directory\n' span_id: 663 ) (Token id:Id.Lit_Chars val:'\t) >actual &&\n' span_id:664) (Token id:Id.Lit_Chars val:'\t>expect &&\n' span_id:665) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:666) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pattern matches prefix completely' span_id:673))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:677) (Token id:Id.Lit_Chars val:'\t: >expect &&\n' span_id:678) (Token id: Id.Lit_Chars val: '\tgit ls-files -i -o --exclude "/three/a.3[abc]" >actual &&\n' span_id: 679 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:680) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ls-files with "**" patterns' span_id:687))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:691) (Token id:Id.Lit_Chars val:'\tcat <<\\EOF >expect &&\n' span_id:692) (Token id:Id.Lit_Chars val:'a.1\n' span_id:693) (Token id:Id.Lit_Chars val:'one/a.1\n' span_id:694) (Token id:Id.Lit_Chars val:'one/two/a.1\n' span_id:695) (Token id:Id.Lit_Chars val:'three/a.1\n' span_id:696) (Token id:Id.Lit_Chars val:'EOF\n' span_id:697) (Token id: Id.Lit_Chars val: '\tgit ls-files -o -i --exclude "**/a.1" >actual &&\n' span_id: 698 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:699) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ls-files with "**" patterns and no slashes' span_id:707))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:711) (Token id:Id.Lit_Chars val:'\t: >expect &&\n' span_id:712) (Token id:Id.Lit_Chars val:'\tgit ls-files -o -i --exclude "one**a.1" >actual &&\n' span_id:713) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:714) ) } ) (C {(test_done)}) ] )