(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:'perl interface (Git.pm)' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (command.Pipeline children:[(C {(test_have_prereq)} {(PERL)})] negated:T)
              terminator: (Token id:Id.Op_Semi val:';' span_id:30)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (SQ 
                        (Token
                          id: Id.Lit_Chars
                          val: 'skipping perl interface tests, perl not available'
                          span_id: 37
                        )
                      )
                    }
                  spids: [35]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [23 32]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.Simple
          words: [{(perl)} {(-MTest) (Id.Lit_Other ':') (Id.Lit_Other ':') (More)} {(-e)} {(0)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'2>' span_id:57)
              fd: 2
              arg_word: {(/dev/null)}
            )
          ]
        )
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(DQ ('Perl Test::More unavailable, skipping test'))}
                  spids: [65]
                )
              ]
            )
            (C {(test_done)})
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'set up test repository' span_id:85))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'echo "test file 1" > file1 &&\n' span_id:91) 
          (Token id:Id.Lit_Chars val:'     echo "test file 2" > file2 &&\n' span_id:92) (Token id:Id.Lit_Chars val:'     mkdir directory1 &&\n' span_id:93) 
          (Token
            id: Id.Lit_Chars
            val: '     echo "in directory1" >> directory1/file &&\n'
            span_id: 94
          ) (Token id:Id.Lit_Chars val:'     mkdir directory2 &&\n' span_id:95) 
          (Token
            id: Id.Lit_Chars
            val: '     echo "in directory2" >> directory2/file &&\n'
            span_id: 96
          ) (Token id:Id.Lit_Chars val:'     git add . &&\n' span_id:97) 
          (Token id:Id.Lit_Chars val:'     git commit -m "first commit" &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\n' span_id:99) 
          (Token
            id: Id.Lit_Chars
            val: '     echo "new file in subdir 2" > directory2/file2 &&\n'
            span_id: 100
          ) (Token id:Id.Lit_Chars val:'     git add . &&\n' span_id:101) 
          (Token
            id: Id.Lit_Chars
            val: '     git commit -m "commit in directory2" &&\n'
            span_id: 102
          ) (Token id:Id.Lit_Chars val:'\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'     echo "changed file 1" > file1 &&\n' span_id:104) (Token id:Id.Lit_Chars val:'     git commit -a -m "second commit" &&\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\n' span_id:106) (Token id:Id.Lit_Chars val:'     git config --add color.test.slot1 green &&\n' span_id:107) 
          (Token
            id: Id.Lit_Chars
            val: '     git config --add test.string value &&\n'
            span_id: 108
          ) (Token id:Id.Lit_Chars val:'     git config --add test.dupstring value1 &&\n' span_id:109) 
          (Token
            id: Id.Lit_Chars
            val: '     git config --add test.dupstring value2 &&\n'
            span_id: 110
          ) (Token id:Id.Lit_Chars val:'     git config --add test.booltrue true &&\n' span_id:111) 
          (Token
            id: Id.Lit_Chars
            val: '     git config --add test.boolfalse no &&\n'
            span_id: 112
          ) (Token id:Id.Lit_Chars val:'     git config --add test.boolother other &&\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'     git config --add test.int 2k &&\n' span_id:114) (Token id:Id.Lit_Chars val:'     git config --add test.path "~/foo" &&\n' span_id:115) 
          (Token
            id: Id.Lit_Chars
            val: '     git config --add test.pathexpanded "$HOME/foo" &&\n'
            span_id: 116
          ) (Token id:Id.Lit_Chars val:'     git config --add test.pathmulti foo &&\n' span_id:117) 
          (Token
            id: Id.Lit_Chars
            val: '     git config --add test.pathmulti bar\n'
            span_id: 118
          ) (Token id:Id.Lit_Chars val:'     ' span_id:119)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_external_has_tap)
          op: assign_op.Equal
          rhs: {(1)}
          spids: [126]
        )
      ]
    )
    (C {(test_external_without_stderr)} {(SQ (Token id:Id.Lit_Chars val:'Perl API' span_id:135))} 
      {(perl)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/t9700/test.pl)}
    )
    (C {(test_done)})
  ]
)