(command.CommandList
  children: [
    (command.ShFunction
      name: read_tree_must_succeed
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(git)} {(ls-files)} {(-s)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:26)
                      fd: -1
                      arg_word: {(pre-dry-run)}
                    )
                  ]
                )
                (C {(git)} {(read-tree)} {(-n)} {(DQ ($ Id.VSub_At '$@'))})
                (command.Simple
                  words: [{(git)} {(ls-files)} {(-s)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:51)
                      fd: -1
                      arg_word: {(post-dry-run)}
                    )
                  ]
                )
                (C {(test_cmp)} {(pre-dry-run)} {(post-dry-run)})
                (C {(git)} {(read-tree)} {(DQ ($ Id.VSub_At '$@'))})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: read_tree_must_fail
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [{(git)} {(ls-files)} {(-s)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:91)
                      fd: -1
                      arg_word: {(pre-dry-run)}
                    )
                  ]
                )
                (C {(test_must_fail)} {(git)} {(read-tree)} {(-n)} {(DQ ($ Id.VSub_At '$@'))})
                (command.Simple
                  words: [{(git)} {(ls-files)} {(-s)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:118)
                      fd: -1
                      arg_word: {(post-dry-run)}
                    )
                  ]
                )
                (C {(test_cmp)} {(pre-dry-run)} {(post-dry-run)})
                (C {(test_must_fail)} {(git)} {(read-tree)} {(DQ ($ Id.VSub_At '$@'))})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: read_tree_u_must_succeed
      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.Simple
                  words: [{(git)} {(ls-files)} {(-s)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:160)
                      fd: -1
                      arg_word: {(pre-dry-run)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(git)} {(diff-files)} {(-p)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:172)
                      fd: -1
                      arg_word: {(pre-dry-run-wt)}
                    )
                  ]
                )
                (C {(git)} {(read-tree)} {(-n)} {(DQ ($ Id.VSub_At '$@'))})
                (command.Simple
                  words: [{(git)} {(ls-files)} {(-s)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:197)
                      fd: -1
                      arg_word: {(post-dry-run)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(git)} {(diff-files)} {(-p)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:209)
                      fd: -1
                      arg_word: {(post-dry-run-wt)}
                    )
                  ]
                )
                (C {(test_cmp)} {(pre-dry-run)} {(post-dry-run)})
                (C {(test_cmp)} {(pre-dry-run-wt)} {(post-dry-run-wt)})
                (C {(git)} {(read-tree)} {(DQ ($ Id.VSub_At '$@'))})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: read_tree_u_must_fail
      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.Simple
                  words: [{(git)} {(ls-files)} {(-s)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:258)
                      fd: -1
                      arg_word: {(pre-dry-run)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(git)} {(diff-files)} {(-p)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:270)
                      fd: -1
                      arg_word: {(pre-dry-run-wt)}
                    )
                  ]
                )
                (C {(test_must_fail)} {(git)} {(read-tree)} {(-n)} {(DQ ($ Id.VSub_At '$@'))})
                (command.Simple
                  words: [{(git)} {(ls-files)} {(-s)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:297)
                      fd: -1
                      arg_word: {(post-dry-run)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(git)} {(diff-files)} {(-p)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:309)
                      fd: -1
                      arg_word: {(post-dry-run-wt)}
                    )
                  ]
                )
                (C {(test_cmp)} {(pre-dry-run)} {(post-dry-run)})
                (C {(test_cmp)} {(pre-dry-run-wt)} {(post-dry-run-wt)})
                (C {(test_must_fail)} {(git)} {(read-tree)} {(DQ ($ Id.VSub_At '$@'))})
              ]
            )
          ]
        )
    )
  ]
)