(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)})
  ]
)