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