(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:'git svn propset tests' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./lib-git-svn.sh)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:foo_subdir2) op: assign_op.Equal rhs: {(DQ (subdir/subdir2/foo_subdir2))} spids: [24] ) ] ) (C {(Id.KW_Set set)} {(-e)}) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(mkdir)} {(import)}) (command.Subshell command_list: (command.CommandList children: [ (command.Sentence child: (C {(Id.KW_Set set)} {(-e)}) terminator: (Token id:Id.Op_Semi val:';' span_id:45) ) (C {(cd)} {(import)}) (C {(mkdir)} {(subdir)}) (C {(mkdir)} {(subdir/subdir2)}) (C {(touch)} {(foo)}) (C {(touch)} {(subdir/foo_subdir)}) (C {(touch)} {(DQ ($ Id.VSub_DollarName '$foo_subdir2'))}) (command.Simple words: [ {(svn_cmd)} {(import)} {(-m)} {(SQ (Token id:Id.Lit_Chars val:'import for git svn' span_id:95))} {(.)} {(DQ ($ Id.VSub_DollarName '$svnrepo'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:104) fd: -1 arg_word: {(/dev/null)} ) ] ) ] ) ) ] ) (C {(rm)} {(-rf)} {(import)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'initialize git svn' span_id:119))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:123) (Token id:Id.Lit_Chars val:'\tgit svn init "$svnrepo"\n' span_id:124) (Token id:Id.Lit_Chars val:'\t' span_id:125) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fetch revisions from svn' span_id:132))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:136) (Token id:Id.Lit_Chars val:'\tgit svn fetch\n' span_id:137) (Token id:Id.Lit_Chars val:'\t' span_id:138) ) } ) (command.ShFunction name: set_props body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:subdir) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [150] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:file) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [156] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:163) ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:165) ) (command.Subshell command_list: (command.CommandList children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp] children: [ (C {(cd)} {(DQ ($ Id.VSub_DollarName '$subdir'))}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:178) cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:190) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(git)} {(svn)} {(propset)} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))} {(DQ ($ Id.VSub_DollarName '$file'))} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:215) arg_word: {(1)} ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:221) ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:223) ) ] ) ) (command.Simple words: [{(echo)} {(hello)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:235) fd: -1 arg_word: {(DQ ($ Id.VSub_DollarName '$file'))} ) ] ) (C {(git)} {(commit)} {(-m)} {(DQ ('testing propset'))} {(DQ ($ Id.VSub_DollarName '$file'))} ) ] ) ] ) ) ] ) ) (command.ShFunction name: confirm_props body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:subdir) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [270] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:file) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [276] ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:283) ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:285) ) (command.Subshell command_list: (command.CommandList children: [ (command.Sentence child: (C {(Id.KW_Set set)} {(-e)}) terminator: (Token id:Id.Op_Semi val:';' span_id:293) ) (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(cd)} {(DQ (svn_project/) ($ Id.VSub_DollarName '$subdir'))}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:305) cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:317) ) ] body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test)} { (DQ (command_sub left_token: (Token id: Id.Left_DollarParen val: '$(' span_id: 325 ) command_list: (command.CommandList children: [ (C {(svn_cmd)} {(propget)} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_DollarName '$file'))} ) ] ) ) ) } {(Id.Lit_Equals '=')} {(DQ ($ Id.VSub_Number '$2'))} ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:348) arg_word: {(1)} ) ] ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:354) ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:356) ) ] ) ) ] ) ] ) ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add props top level' span_id:378))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:382) (Token id: Id.Lit_Chars val: '\tset_props "." "foo" "svn:keywords" "FreeBSD=%H" &&\n' span_id: 383 ) (Token id:Id.Lit_Chars val:'\tgit svn dcommit &&\n' span_id:384) (Token id: Id.Lit_Chars val: '\tsvn_cmd co "$svnrepo" svn_project &&\n' span_id: 385 ) (Token id:Id.Lit_Chars val:'\tconfirm_props "." "foo" "svn:keywords" "FreeBSD=%H" &&\n' span_id:386) (Token id:Id.Lit_Chars val:'\trm -rf svn_project\n' span_id:387) (Token id:Id.Lit_Chars val:'\t' span_id:388) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add multiple props' span_id:395))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:399) (Token id:Id.Lit_Chars val:'\tset_props "." "foo" \\\n' span_id:400) (Token id:Id.Lit_Chars val:'\t\t"svn:keywords" "FreeBSD=%H" fbsd:nokeywords yes &&\n' span_id:401) (Token id:Id.Lit_Chars val:'\tgit svn dcommit &&\n' span_id:402) (Token id:Id.Lit_Chars val:'\tsvn_cmd co "$svnrepo" svn_project &&\n' span_id:403) (Token id:Id.Lit_Chars val:'\tconfirm_props "." "foo" \\\n' span_id:404) (Token id:Id.Lit_Chars val:'\t\t"svn:keywords" "FreeBSD=%H" fbsd:nokeywords yes &&\n' span_id:405) (Token id:Id.Lit_Chars val:'\trm -rf svn_project\n' span_id:406) (Token id:Id.Lit_Chars val:'\t' span_id:407) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add props subdir' span_id:414))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:418) (Token id: Id.Lit_Chars val: '\tset_props "." "$foo_subdir2" svn:keywords "FreeBSD=%H" &&\n' span_id: 419 ) (Token id:Id.Lit_Chars val:'\tgit svn dcommit &&\n' span_id:420) (Token id: Id.Lit_Chars val: '\tsvn_cmd co "$svnrepo" svn_project &&\n' span_id: 421 ) (Token id: Id.Lit_Chars val: '\tconfirm_props "." "$foo_subdir2" "svn:keywords" "FreeBSD=%H" &&\n' span_id: 422 ) (Token id:Id.Lit_Chars val:'\trm -rf svn_project\n' span_id:423) (Token id:Id.Lit_Chars val:'\t' span_id:424) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'add props relative' span_id:431))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:435) (Token id: Id.Lit_Chars val: '\tset_props "subdir/subdir2" "../foo_subdir" \\\n' span_id: 436 ) (Token id:Id.Lit_Chars val:'\t\tsvn:keywords "FreeBSD=%H" &&\n' span_id:437) (Token id:Id.Lit_Chars val:'\tgit svn dcommit &&\n' span_id:438) (Token id:Id.Lit_Chars val:'\tsvn_cmd co "$svnrepo" svn_project &&\n' span_id:439) (Token id: Id.Lit_Chars val: '\tconfirm_props "subdir/subdir2" "../foo_subdir" \\\n' span_id: 440 ) (Token id:Id.Lit_Chars val:'\t\tsvn:keywords "FreeBSD=%H" &&\n' span_id:441) (Token id:Id.Lit_Chars val:'\trm -rf svn_project\n' span_id:442) (Token id:Id.Lit_Chars val:'\t' span_id:443) ) } ) (C {(test_done)}) ] )