(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (DQ ('Test whether cache-tree is properly updated\n') ('\n') ('Tests whether various commands properly update and/or rewrite the\n') ('cache-tree extension.\n') ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: cmp_cache_tree body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Pipeline children: [ (C {(test-dump-cache-tree)}) (command.Simple words: [{(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'/#(ref)/d' span_id:35))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:38) fd: -1 arg_word: {(actual)} ) ] ) ] negated: F ) (command.Simple words: [{(sed)} {(DQ (s/) ($ Id.VSub_DollarName '$_x40') (/SHA/))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:52) fd: -1 arg_word: {(actual)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:55) fd: -1 arg_word: {(filtered)} ) ] ) (C {(test_cmp)} {(DQ ($ Id.VSub_Number '$1'))} {(filtered)}) ] ) ] ) ) (command.ShFunction name: generate_expected_cache_tree_rec body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dir) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_Number '$1') (braced_var_sub token: (Token id:Id.VSub_Number val:1 span_id:93) suffix_op: (suffix_op.Unary op_id: Id.VTest_ColonPlus arg_word: {(Id.Lit_Slash /)} ) ) ) } spids: [89] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:parent) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [102] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:subtrees) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:119) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(git)} {(ls-files)}) (C {(grep)} {(/)}) (C {(cut)} {(-d)} {(/)} {(-f)} {(1)}) (C {(uniq)}) ] negated: F ) ] ) ) } spids: [118] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:subtree_count) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:145) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {(DQ ($ Id.VSub_DollarName '$subtrees'))}) (C {(awk)} {(-v)} {(Id.Lit_VarLike 'c=') (0)} { (SQ (Token id: Id.Lit_Chars val: '$1 != "" {++c} END {print c}' span_id: 160 ) ) } ) ] negated: F ) ] ) ) } spids: [144] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:entries) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:168) command_list: (command.CommandList children: [ (command.Pipeline children: [(C {(git)} {(ls-files)}) (C {(wc)} {(-l)})] negated: F ) ] ) ) } spids: [167] ) ] ) (C {(printf)} { (DQ ('SHA ') ($ Id.VSub_DollarName '$dir') (' (%d entries, %d subtrees)') (Id.Lit_Other '\\') (n) ) } {(DQ ($ Id.VSub_DollarName '$entries'))} {(DQ ($ Id.VSub_DollarName '$subtree_count'))} ) (command.ForEach iter_name: subtree iter_words: [{($ Id.VSub_DollarName '$subtrees')}] do_arg_iter: F body: (command.DoGroup children: [ (C {(cd)} {(DQ ($ Id.VSub_DollarName '$subtree'))}) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(generate_expected_cache_tree_rec)} {(DQ ($ Id.VSub_DollarName '$dir') ($ Id.VSub_DollarName '$subtree'))} {(DQ ($ Id.VSub_DollarName '$dir'))} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:234) arg_word: {(1)} ) ] ) (C {(cd)} {(..)}) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dir) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$parent')} spids: [249] ) ] ) ] ) ] ) ) (command.ShFunction name: generate_expected_cache_tree body: (command.BraceGroup children: [ (command.Subshell command_list: (command.CommandList children:[(C {(generate_expected_cache_tree_rec)})]) ) ] ) ) (command.ShFunction name: test_cache_tree body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{(generate_expected_cache_tree)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:284) fd: -1 arg_word: {(expect)} ) ] ) (C {(cmp_cache_tree)} {(expect)}) ] ) ] ) ) (command.ShFunction name: test_invalid_cache_tree body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [ {(printf)} {(DQ ('invalid %s ()') (Id.Lit_Other '\\') (n))} {(DQ )} {(DQ ($ Id.VSub_At '$@'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:320) fd: -1 arg_word: {(expect)} ) ] ) (command.Pipeline children: [ (C {(test-dump-cache-tree)}) (command.Simple words: [ {(sed)} {(-n)} {(-e)} {(DQ ('s/[0-9]* subtrees//'))} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'/#(ref)/d' span_id:344))} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'/^invalid /p' span_id:350))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:353) fd: -1 arg_word: {(actual)} ) ] ) ] negated: F ) (C {(test_cmp)} {(expect)} {(actual)}) ] ) ] ) ) (command.ShFunction name: test_no_cache_tree body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Simple words: [{(Id.Lit_Other ':')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:378) fd: -1 arg_word: {(expect)} ) ] ) (C {(cmp_cache_tree)} {(expect)}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'initial commit has cache-tree' span_id:394))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:398) (Token id:Id.Lit_Chars val:'\ttest_commit foo &&\n' span_id:399) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:400) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'read-tree HEAD establishes cache-tree' span_id:407))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:411) (Token id:Id.Lit_Chars val:'\tgit read-tree HEAD &&\n' span_id:412) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:413) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git-add invalidates cache-tree' span_id:420))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:424) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git reset --hard; git read-tree HEAD" &&\n' span_id: 425 ) (Token id:Id.Lit_Chars val:'\techo "I changed this file" >foo &&\n' span_id:426) (Token id:Id.Lit_Chars val:'\tgit add foo &&\n' span_id:427) (Token id:Id.Lit_Chars val:'\ttest_invalid_cache_tree\n' span_id:428) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'git-add in subdir invalidates cache-tree' span_id:435))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:439) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git reset --hard; git read-tree HEAD" &&\n' span_id: 440 ) (Token id:Id.Lit_Chars val:'\tmkdir dirx &&\n' span_id:441) (Token id: Id.Lit_Chars val: '\techo "I changed this file" >dirx/foo &&\n' span_id: 442 ) (Token id:Id.Lit_Chars val:'\tgit add dirx/foo &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\ttest_invalid_cache_tree\n' span_id:444) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:450) fd: -1 arg_word: {(before)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:453) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:454)) (OF) } here_end_span_id: 460 stdin_parts: [ ('SHA (3 entries, 2 subtrees)\n') ('SHA dir1/ (1 entries, 0 subtrees)\n') ('SHA dir2/ (1 entries, 0 subtrees)\n') ] ) ] ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:464) fd: -1 arg_word: {(expect)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:467) fd: -1 here_begin: {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:468)) (OF) } here_end_span_id: 474 stdin_parts: [ ('invalid (2 subtrees)\n') ('invalid dir1/ (0 subtrees)\n') ('SHA dir2/ (1 entries, 0 subtrees)\n') ] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'git-add in subdir does not invalidate sibling cache-tree' span_id: 479 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:483) (Token id:Id.Lit_Chars val:'\tgit tag no-children &&\n' span_id:484) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git reset --hard no-children; git read-tree HEAD" &&\n' span_id: 485 ) (Token id:Id.Lit_Chars val:'\tmkdir dir1 dir2 &&\n' span_id:486) (Token id:Id.Lit_Chars val:'\ttest_commit dir1/a &&\n' span_id:487) (Token id:Id.Lit_Chars val:'\ttest_commit dir2/b &&\n' span_id:488) (Token id: Id.Lit_Chars val: '\techo "I changed this file" >dir1/a &&\n' span_id: 489 ) (Token id:Id.Lit_Chars val:'\tcmp_cache_tree before &&\n' span_id:490) (Token id: Id.Lit_Chars val: '\techo "I changed this file" >dir1/a &&\n' span_id: 491 ) (Token id:Id.Lit_Chars val:'\tgit add dir1/a &&\n' span_id:492) (Token id:Id.Lit_Chars val:'\tcmp_cache_tree expect\n' span_id:493) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'update-index invalidates cache-tree' span_id:500))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:504) (Token id: Id.Lit_Chars val: '\ttest_when_finished "git reset --hard; git read-tree HEAD" &&\n' span_id: 505 ) (Token id:Id.Lit_Chars val:'\techo "I changed this file" >foo &&\n' span_id:506) (Token id:Id.Lit_Chars val:'\tgit update-index --add foo &&\n' span_id:507) (Token id:Id.Lit_Chars val:'\ttest_invalid_cache_tree\n' span_id:508) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'write-tree establishes cache-tree' span_id:515))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:519) (Token id:Id.Lit_Chars val:'\ttest-scrap-cache-tree &&\n' span_id:520) (Token id:Id.Lit_Chars val:'\tgit write-tree &&\n' span_id:521) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:522) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'test-scrap-cache-tree works' span_id:529))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:533) (Token id:Id.Lit_Chars val:'\tgit read-tree HEAD &&\n' span_id:534) (Token id:Id.Lit_Chars val:'\ttest-scrap-cache-tree &&\n' span_id:535) (Token id:Id.Lit_Chars val:'\ttest_no_cache_tree\n' span_id:536) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'second commit has cache-tree' span_id:543))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:547) (Token id:Id.Lit_Chars val:'\ttest_commit bar &&\n' span_id:548) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:549) ) } ) (C {(test_expect_success)} {(PERL)} { (SQ (Token id: Id.Lit_Chars val: 'commit --interactive gives cache-tree on partial commit' span_id: 558 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:562) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOT >foo.c &&\n' span_id:563) (Token id:Id.Lit_Chars val:'\tint foo()\n' span_id:564) (Token id:Id.Lit_Chars val:'\t{\n' span_id:565) (Token id:Id.Lit_Chars val:'\t\treturn 42;\n' span_id:566) (Token id:Id.Lit_Chars val:'\t}\n' span_id:567) (Token id:Id.Lit_Chars val:'\tint bar()\n' span_id:568) (Token id:Id.Lit_Chars val:'\t{\n' span_id:569) (Token id:Id.Lit_Chars val:'\t\treturn 42;\n' span_id:570) (Token id:Id.Lit_Chars val:'\t}\n' span_id:571) (Token id:Id.Lit_Chars val:'\tEOT\n' span_id:572) (Token id:Id.Lit_Chars val:'\tgit add foo.c &&\n' span_id:573) (Token id:Id.Lit_Chars val:'\ttest_invalid_cache_tree &&\n' span_id:574) (Token id:Id.Lit_Chars val:'\tgit commit -m "add a file" &&\n' span_id:575) (Token id:Id.Lit_Chars val:'\ttest_cache_tree &&\n' span_id:576) (Token id:Id.Lit_Chars val:'\tcat <<-\\EOT >foo.c &&\n' span_id:577) (Token id:Id.Lit_Chars val:'\tint foo()\n' span_id:578) (Token id:Id.Lit_Chars val:'\t{\n' span_id:579) (Token id:Id.Lit_Chars val:'\t\treturn 43;\n' span_id:580) (Token id:Id.Lit_Chars val:'\t}\n' span_id:581) (Token id:Id.Lit_Chars val:'\tint bar()\n' span_id:582) (Token id:Id.Lit_Chars val:'\t{\n' span_id:583) (Token id:Id.Lit_Chars val:'\t\treturn 44;\n' span_id:584) (Token id:Id.Lit_Chars val:'\t}\n' span_id:585) (Token id:Id.Lit_Chars val:'\tEOT\n' span_id:586) (Token id: Id.Lit_Chars val: '\t(echo p; echo 1; echo; echo s; echo n; echo y; echo q) |\n' span_id: 587 ) (Token id:Id.Lit_Chars val:'\tgit commit --interactive -m foo &&\n' span_id:588) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:589) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'commit in child dir has cache-tree' span_id:596))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:600) (Token id:Id.Lit_Chars val:'\tmkdir dir &&\n' span_id:601) (Token id:Id.Lit_Chars val:'\t>dir/child.t &&\n' span_id:602) (Token id:Id.Lit_Chars val:'\tgit add dir/child.t &&\n' span_id:603) (Token id:Id.Lit_Chars val:'\tgit commit -m dir/child.t &&\n' span_id:604) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:605) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'reset --hard gives cache-tree' span_id:612))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:616) (Token id:Id.Lit_Chars val:'\ttest-scrap-cache-tree &&\n' span_id:617) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:618) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:619) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'reset --hard without index gives cache-tree' span_id:626))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:630) (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:631) (Token id:Id.Lit_Chars val:'\tgit reset --hard &&\n' span_id:632) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:633) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout gives cache-tree' span_id:640))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:644) (Token id:Id.Lit_Chars val:'\tgit tag current &&\n' span_id:645) (Token id:Id.Lit_Chars val:'\tgit checkout HEAD^ &&\n' span_id:646) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:647) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout -b gives cache-tree' span_id:654))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:658) (Token id:Id.Lit_Chars val:'\tgit checkout current &&\n' span_id:659) (Token id:Id.Lit_Chars val:'\tgit checkout -b prev HEAD^ &&\n' span_id:660) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:661) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'checkout -B gives cache-tree' span_id:668))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:672) (Token id:Id.Lit_Chars val:'\tgit checkout current &&\n' span_id:673) (Token id:Id.Lit_Chars val:'\tgit checkout -B prev HEAD^ &&\n' span_id:674) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:675) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge --ff-only maintains cache-tree' span_id:682))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:686) (Token id:Id.Lit_Chars val:'\tgit checkout current &&\n' span_id:687) (Token id:Id.Lit_Chars val:'\tgit checkout -b changes &&\n' span_id:688) (Token id:Id.Lit_Chars val:'\ttest_commit llamas &&\n' span_id:689) (Token id:Id.Lit_Chars val:'\ttest_commit pachyderm &&\n' span_id:690) (Token id:Id.Lit_Chars val:'\ttest_cache_tree &&\n' span_id:691) (Token id:Id.Lit_Chars val:'\tgit checkout current &&\n' span_id:692) (Token id:Id.Lit_Chars val:'\ttest_cache_tree &&\n' span_id:693) (Token id:Id.Lit_Chars val:'\tgit merge --ff-only changes &&\n' span_id:694) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:695) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'merge maintains cache-tree' span_id:702))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:706) (Token id:Id.Lit_Chars val:'\tgit checkout current &&\n' span_id:707) (Token id:Id.Lit_Chars val:'\tgit checkout -b changes2 &&\n' span_id:708) (Token id:Id.Lit_Chars val:'\ttest_commit alpacas &&\n' span_id:709) (Token id:Id.Lit_Chars val:'\ttest_cache_tree &&\n' span_id:710) (Token id:Id.Lit_Chars val:'\tgit checkout current &&\n' span_id:711) (Token id:Id.Lit_Chars val:'\ttest_commit struthio &&\n' span_id:712) (Token id:Id.Lit_Chars val:'\ttest_cache_tree &&\n' span_id:713) (Token id:Id.Lit_Chars val:'\tgit merge changes2 &&\n' span_id:714) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:715) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'partial commit gives cache-tree' span_id:722))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:726) (Token id: Id.Lit_Chars val: '\tgit checkout -b partial no-children &&\n' span_id: 727 ) (Token id:Id.Lit_Chars val:'\ttest_commit one &&\n' span_id:728) (Token id:Id.Lit_Chars val:'\ttest_commit two &&\n' span_id:729) (Token id:Id.Lit_Chars val:'\techo "some change" >one.t &&\n' span_id:730) (Token id:Id.Lit_Chars val:'\tgit add one.t &&\n' span_id:731) (Token id:Id.Lit_Chars val:'\techo "some other change" >two.t &&\n' span_id:732) (Token id:Id.Lit_Chars val:'\tgit commit two.t -m partial &&\n' span_id:733) (Token id:Id.Lit_Chars val:'\ttest_cache_tree\n' span_id:734) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'no phantom error when switching trees' span_id:741))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:745) (Token id:Id.Lit_Chars val:'\tmkdir newdir &&\n' span_id:746) (Token id:Id.Lit_Chars val:'\t>newdir/one &&\n' span_id:747) (Token id:Id.Lit_Chars val:'\tgit add newdir/one &&\n' span_id:748) (Token id:Id.Lit_Chars val:'\tgit checkout 2>errors &&\n' span_id:749) (Token id:Id.Lit_Chars val:'\t! test -s errors\n' span_id:750) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'switching trees does not invalidate shared index' span_id: 757 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:761) (Token id:Id.Lit_Chars val:'\tgit update-index --split-index &&\n' span_id:762) (Token id:Id.Lit_Chars val:'\t>split &&\n' span_id:763) (Token id:Id.Lit_Chars val:'\tgit add split &&\n' span_id:764) (Token id: Id.Lit_Chars val: '\ttest-dump-split-index .git/index | grep -v ^own >before &&\n' span_id: 765 ) (Token id:Id.Lit_Chars val:'\tgit commit -m "as-is" &&\n' span_id:766) (Token id: Id.Lit_Chars val: '\ttest-dump-split-index .git/index | grep -v ^own >after &&\n' span_id: 767 ) (Token id:Id.Lit_Chars val:'\ttest_cmp before after\n' span_id:768) ) } ) (C {(test_done)}) ] )