(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:'read-tree D/F conflict corner cases' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-read-tree.sh)}) (command.ShFunction name: maketree body: (command.BraceGroup children: [ (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(rm)} {(-f)} {(.git/index)} {(.git/index.lock)}) (C {(git)} {(clean)} {(-d)} {(-f)} {(-f)} {(-q)} {(-x)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:name) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [61] ) ] ) (C {(shift)}) (command.ForEach iter_name: it do_arg_iter: T body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe] children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:path) op: assign_op.Equal rhs: { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 83 ) command_list: (command.CommandList children: [ (C {(expr)} {(DQ ($ Id.VSub_DollarName '$it'))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'\\([^:]*\\)' span_id:93))} ) ] ) ) } spids: [82] ) ] ) (C {(mkdir)} {(-p)} { (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 104 ) command_list: (command.CommandList children: [ (C {(dirname)} {(DQ ($ Id.VSub_DollarName '$path'))}) ] ) ) } ) (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$it'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:121) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$path'))} ) ] ) (C {(git)} {(update-index)} {(--add)} {(DQ ($ Id.VSub_DollarName '$path'))} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:141) ) ] ) ] ) ) (C {(git)} {(tag)} {(DQ ($ Id.VSub_DollarName '$name'))} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:157) command_list: (command.CommandList children: [(C {(git)} {(write-tree)})] ) ) } ) ] ) ] ) ) ] ) ) (command.ShFunction name: settree body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(rm)} {(-f)} {(.git/index)} {(.git/index.lock)}) (C {(git)} {(clean)} {(-d)} {(-f)} {(-f)} {(-q)} {(-x)}) (C {(git)} {(read-tree)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(git)} {(checkout-index)} {(-f)} {(-q)} {(-u)} {(-a)}) (C {(git)} {(update-index)} {(--refresh)}) ] ) ] ) ) (command.ShFunction name: checkindex body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Pipeline children: [ (C {(git)} {(ls-files)} {(-s)}) (command.Simple words: [ {(sed)} { (DQ ('s|^[0-7][0-7]* ') ($ Id.VSub_DollarName '$_x40') (' ') (Id.Lit_Other '\\') ('([0-3]') (Id.Lit_Other '\\') (')\t|') (Id.Lit_Other '\\') ('1 |') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:271) fd: -1 arg_word: {(current)} ) ] ) ] negated: F ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:279) fd: -1 arg_word: {(expect)} ) ] ) (C {(test_cmp)} {(expect)} {(current)}) ] ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:299) (Token id: Id.Lit_Chars val: '\tmaketree O-000 a/b-2/c/d a/b/c/d a/x &&\n' span_id: 300 ) (Token id:Id.Lit_Chars val:'\tmaketree A-000 a/b-2/c/d a/b/c/d a/x &&\n' span_id:301) (Token id: Id.Lit_Chars val: '\tmaketree A-001 a/b-2/c/d a/b/c/d a/b/c/e a/x &&\n' span_id: 302 ) (Token id:Id.Lit_Chars val:'\tmaketree B-000 a/b-2/c/d a/b a/x &&\n' span_id:303) (Token id:Id.Lit_Chars val:'\n' span_id:304) (Token id:Id.Lit_Chars val:'\tmaketree O-010 t-0 t/1 t/2 t=3 &&\n' span_id:305) (Token id: Id.Lit_Chars val: '\tmaketree A-010 t-0 t t=3 &&\n' span_id: 306 ) (Token id:Id.Lit_Chars val:'\tmaketree B-010 t/1: t=3: &&\n' span_id:307) (Token id:Id.Lit_Chars val:'\n' span_id:308) (Token id:Id.Lit_Chars val:'\tmaketree O-020 ds/dma/ioat.c ds/dma/ioat_dca.c &&\n' span_id:309) (Token id: Id.Lit_Chars val: '\tmaketree A-020 ds/dma/ioat/Makefile ds/dma/ioat/registers.h &&\n' span_id: 310 ) (Token id:Id.Lit_Chars val:'\t:\n' span_id:311) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'3-way (1)' span_id:318))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:322) (Token id:Id.Lit_Chars val:'\tsettree A-000 &&\n' span_id:323) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u O-000 A-000 B-000 &&\n' span_id:324) (Token id:Id.Lit_Chars val:'\tcheckindex <<-EOF\n' span_id:325) (Token id:Id.Lit_Chars val:'\t3 a/b\n' span_id:326) (Token id:Id.Lit_Chars val:'\t0 a/b-2/c/d\n' span_id:327) (Token id:Id.Lit_Chars val:'\t1 a/b/c/d\n' span_id:328) (Token id:Id.Lit_Chars val:'\t2 a/b/c/d\n' span_id:329) (Token id:Id.Lit_Chars val:'\t0 a/x\n' span_id:330) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:331) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'3-way (2)' span_id:338))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:342) (Token id:Id.Lit_Chars val:'\tsettree A-001 &&\n' span_id:343) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u O-000 A-001 B-000 &&\n' span_id:344) (Token id:Id.Lit_Chars val:'\tcheckindex <<-EOF\n' span_id:345) (Token id:Id.Lit_Chars val:'\t3 a/b\n' span_id:346) (Token id:Id.Lit_Chars val:'\t0 a/b-2/c/d\n' span_id:347) (Token id:Id.Lit_Chars val:'\t1 a/b/c/d\n' span_id:348) (Token id:Id.Lit_Chars val:'\t2 a/b/c/d\n' span_id:349) (Token id:Id.Lit_Chars val:'\t2 a/b/c/e\n' span_id:350) (Token id:Id.Lit_Chars val:'\t0 a/x\n' span_id:351) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:352) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'3-way (3)' span_id:359))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:363) (Token id:Id.Lit_Chars val:'\tsettree A-010 &&\n' span_id:364) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u O-010 A-010 B-010 &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\tcheckindex <<-EOF\n' span_id:366) (Token id:Id.Lit_Chars val:'\t2 t\n' span_id:367) (Token id:Id.Lit_Chars val:'\t1 t-0\n' span_id:368) (Token id:Id.Lit_Chars val:'\t2 t-0\n' span_id:369) (Token id:Id.Lit_Chars val:'\t1 t/1\n' span_id:370) (Token id:Id.Lit_Chars val:'\t3 t/1\n' span_id:371) (Token id:Id.Lit_Chars val:'\t1 t/2\n' span_id:372) (Token id:Id.Lit_Chars val:'\t0 t=3\n' span_id:373) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:374) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'2-way (1)' span_id:381))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:385) (Token id:Id.Lit_Chars val:'\tsettree O-020 &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\tread_tree_u_must_succeed -m -u O-020 A-020 &&\n' span_id:387) (Token id:Id.Lit_Chars val:'\tcheckindex <<-EOF\n' span_id:388) (Token id:Id.Lit_Chars val:'\t0 ds/dma/ioat/Makefile\n' span_id:389) (Token id:Id.Lit_Chars val:'\t0 ds/dma/ioat/registers.h\n' span_id:390) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:391) ) } ) (C {(test_done)}) ] )