(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:'test @{-N} syntax' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: make_commit body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [{(echo)} {(DQ ($ Id.VSub_Number '$1'))}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:30) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$1'))} ) ] ) (C {(git)} {(add)} {(DQ ($ Id.VSub_Number '$1'))}) (C {(git)} {(commit)} {(-m)} {(DQ ($ Id.VSub_Number '$1'))}) ] ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:67))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:71) (Token id:Id.Lit_Chars val:'\n' span_id:72) (Token id:Id.Lit_Chars val:'\tmake_commit 1 &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\tgit branch side &&\n' span_id:74) (Token id:Id.Lit_Chars val:'\tmake_commit 2 &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tmake_commit 3 &&\n' span_id:76) (Token id:Id.Lit_Chars val:'\tgit checkout side &&\n' span_id:77) (Token id:Id.Lit_Chars val:'\tmake_commit 4 &&\n' span_id:78) (Token id:Id.Lit_Chars val:'\tgit merge master &&\n' span_id:79) (Token id:Id.Lit_Chars val:'\tgit checkout master\n' span_id:80) (Token id:Id.Lit_Chars val:'\n' span_id:81) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'@{-1} works' span_id:107))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:111) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev side @{-1}\n' span_id:112) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'@{-1}~2 works' span_id:119))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:123) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev side~2 @{-1}~2\n' span_id:124) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'@{-1}^2 works' span_id:131))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:135) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev side^2 @{-1}^2\n' span_id:136) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'@{-1}@{1} works' span_id:143))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:147) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev side@{1} @{-1}@{1}\n' span_id:148) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'@{-2} works' span_id:155))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:159) (Token id:Id.Lit_Chars val:'\ttest_cmp_rev master @{-2}\n' span_id:160) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'@{-3} fails' span_id:167))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:171) (Token id:Id.Lit_Chars val:'\ttest_must_fail git rev-parse @{-3}\n' span_id:172) ) } ) (C {(test_done)}) ] )