(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:'refspec parsing' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: test_refspec body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:kind) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [23] ) (assign_pair lhs: (sh_lhs_expr.Name name:refspec) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [26] ) (assign_pair lhs: (sh_lhs_expr.Name name:expect) op: assign_op.Equal rhs: {($ Id.VSub_Number '$3')} spids: [29] ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(git)} {(config)} {(remote.frotz.url)} {(DQ (.))}) (C {(git)} {(config)} {(--remove-section)} {(remote.frotz)}) (C {(git)} {(config)} {(remote.frotz.url)} {(DQ (.))}) (C {(git)} {(config)} {(DQ (remote.frotz.) ($ Id.VSub_DollarName '$kind'))} {(DQ ($ Id.VSub_DollarName '$refspec'))} ) (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$expect'))} {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(invalid)} ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:title) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$kind') (' ') ($ Id.VSub_DollarName '$refspec') ) } spids: [103] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'git ls-remote frotz' span_id:113))} spids: [111] ) ] ) ] spids: [86 100] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:title) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$kind') (' ') ($ Id.VSub_DollarName '$refspec') (' (invalid)') ) } spids: [120] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'test_must_fail git ls-remote frotz' span_id: 131 ) ) } spids: [129] ) ] ) ] ) ] ) (C {(test_expect_success)} {(DQ ($ Id.VSub_DollarName '$title'))} {(DQ ($ Id.VSub_DollarName '$test'))} ) ] ) ) (C {(test_refspec)} {(push)} {(SQ )} {(invalid)}) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:':' span_id:165))}) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'::' span_id:173))} {(invalid)}) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'+:' span_id:183))}) (C {(test_refspec)} {(fetch)} {(SQ )}) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:':' span_id:199))}) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'::' span_id:207))} {(invalid)}) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*:refs/remotes/frotz/*' span_id:218))} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*:refs/remotes/frotz' span_id:226))} {(invalid)} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads:refs/remotes/frotz/*' span_id:236))} {(invalid)} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/master:refs/remotes/frotz/xyzzy' span_id:246))} ) (C {(Id.Lit_Other ':')} {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/master::refs/remotes/frotz/xyzzy' span_id:271))} {(invalid)} ) (C {(Id.Lit_Other ':')} {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/maste :refs/remotes/frotz/xyzzy' span_id:283))} {(invalid)} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*:refs/remotes/frotz/*' span_id:294))} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*:refs/remotes/frotz' span_id:302))} {(invalid)} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads:refs/remotes/frotz/*' span_id:312))} {(invalid)} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/master:refs/remotes/frotz/xyzzy' span_id:322))} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/master::refs/remotes/frotz/xyzzy' span_id:330))} {(invalid)} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/maste :refs/remotes/frotz/xyzzy' span_id:340))} {(invalid)} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'master~1:refs/remotes/frotz/backup' span_id:351))} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'master~1:refs/remotes/frotz/backup' span_id:359))} {(invalid)} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'HEAD~4:refs/remotes/frotz/new' span_id:369))} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'HEAD~4:refs/remotes/frotz/new' span_id:377))} {(invalid)} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:HEAD span_id:388))}) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:HEAD span_id:396))}) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/ nitfol' span_id:404))} {(invalid)} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/ nitfol' span_id:414))} {(invalid)} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'HEAD:' span_id:425))} {(invalid)}) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'HEAD:' span_id:435))}) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/ nitfol:' span_id:443))} {(invalid)} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/ nitfol:' span_id:453))} {(invalid)} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:':refs/remotes/frotz/deleteme' span_id:464))} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:':refs/remotes/frotz/HEAD-to-me' span_id:472))} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:':refs/remotes/frotz/delete me' span_id:480))} {(invalid)} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:':refs/remotes/frotz/HEAD to me' span_id:490))} {(invalid)} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*/for-linus:refs/remotes/mine/*-blah' span_id:501))} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*/for-linus:refs/remotes/mine/*-blah' span_id:509))} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads*/for-linus:refs/remotes/mine/*' span_id:518))} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads*/for-linus:refs/remotes/mine/*' span_id:526))} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*/*/for-linus:refs/remotes/mine/*' span_id:535))} {(invalid)} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*/*/for-linus:refs/remotes/mine/*' span_id:545))} {(invalid)} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*g*/for-linus:refs/remotes/mine/*' span_id:556))} {(invalid)} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*g*/for-linus:refs/remotes/mine/*' span_id:566))} {(invalid)} ) (C {(test_refspec)} {(fetch)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*/for-linus:refs/remotes/mine/*' span_id:577))} ) (C {(test_refspec)} {(push)} {(SQ (Token id:Id.Lit_Chars val:'refs/heads/*/for-linus:refs/remotes/mine/*' span_id:585))} ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:good) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:590) command_list: (command.CommandList children: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'\\303\\204' span_id:594))}) ] ) ) } spids: [589] ) ] ) (C {(test_refspec)} {(fetch)} {(DQ (refs/heads/) (${ Id.VSub_Name good))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:bad) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:610) command_list: (command.CommandList children: [(C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'\\011tab' span_id:614))})] ) ) } spids: [609] ) ] ) (C {(test_refspec)} {(fetch)} {(DQ (refs/heads/) (${ Id.VSub_Name bad))} {(invalid)}) (C {(test_done)}) ] )