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