(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git svn propset tests'>)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:foo_subdir2)
          op: Equal
          rhs: {(DQ (subdir/subdir2/foo_subdir2))}
          spids: [24]
        )
      ]
      spids: [24]
    )
    (C {(set)} {(-e)})
    (AndOr
      children: [
        (C {(mkdir)} {(import)})
        (Subshell
          child: 
            (CommandList
              children: [
                (Sentence child:(C {(set)} {(-e)}) terminator:<Op_Semi ';'>)
                (C {(cd)} {(import)})
                (C {(mkdir)} {(subdir)})
                (C {(mkdir)} {(subdir/subdir2)})
                (C {(touch)} {(foo)})
                (C {(touch)} {(subdir/foo_subdir)})
                (C {(touch)} {(DQ ($ VSub_Name '$foo_subdir2'))})
                (SimpleCommand
                  words: [
                    {(svn_cmd)}
                    {(import)}
                    {(-m)}
                    {(SQ <'import for git svn'>)}
                    {(.)}
                    {(DQ ($ VSub_Name '$svnrepo'))}
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 16777215
                      arg_word: {(/dev/null)}
                      spids: [104]
                    )
                  ]
                )
              ]
            )
          spids: [40 107]
        )
      ]
      op_id: Op_DAmp
    )
    (C {(rm)} {(-rf)} {(import)})
    (C {(test_expect_success)} {(SQ <'initialize git svn'>)} 
      {(SQ <'\n'> <'\tgit svn init "$svnrepo"\n'> <'\t'>)}
    )
    (C {(test_expect_success)} {(SQ <'fetch revisions from svn'>)} 
      {(SQ <'\n'> <'\tgit svn fetch\n'> <'\t'>)}
    )
    (FuncDef
      name: set_props
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:subdir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [150]
                )
              ]
              spids: [150]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:file)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [156]
                )
              ]
              spids: [156]
            )
            (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
            (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
            (Subshell
              child: 
                (AndOr
                  children: [
                    (C {(cd)} {(DQ ($ VSub_Name '$subdir'))})
                    (AndOr
                      children: [
                        (While
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-gt)} {(0)} {(Lit_Other ']')})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          body: 
                            (DoGroup
                              children: [
                                (AndOr
                                  children: [
                                    (C {(git)} {(svn)} {(propset)} {(DQ ($ VSub_Number '$1'))} 
                                      {(DQ ($ VSub_Number '$2'))} {(DQ ($ VSub_Name '$file'))}
                                    )
                                    (C {(exit)} {(1)})
                                  ]
                                  op_id: Op_DPipe
                                )
                                (Sentence
                                  child: (C {(shift)})
                                  terminator: <Op_Semi ';'>
                                )
                                (Sentence
                                  child: (C {(shift)})
                                  terminator: <Op_Semi ';'>
                                )
                              ]
                              spids: [192 226]
                            )
                        )
                        (AndOr
                          children: [
                            (SimpleCommand
                              words: [{(echo)} {(hello)}]
                              redirects: [
                                (Redir
                                  op_id: Redir_DGreat
                                  fd: 16777215
                                  arg_word: {(DQ ($ VSub_Name '$file'))}
                                  spids: [235]
                                )
                              ]
                            )
                            (C {(git)} {(commit)} {(-m)} {(DQ ('testing propset'))} 
                              {(DQ ($ VSub_Name '$file'))}
                            )
                          ]
                          op_id: Op_DAmp
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  op_id: Op_DAmp
                )
              spids: [168 257]
            )
          ]
          spids: [147]
        )
      spids: [142 146]
    )
    (FuncDef
      name: confirm_props
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:subdir)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$1'))}
                  spids: [270]
                )
              ]
              spids: [270]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:file)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number '$2'))}
                  spids: [276]
                )
              ]
              spids: [276]
            )
            (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
            (Sentence child:(C {(shift)}) terminator:<Op_Semi ';'>)
            (Subshell
              child: 
                (CommandList
                  children: [
                    (Sentence child:(C {(set)} {(-e)}) terminator:<Op_Semi ';'>)
                    (AndOr
                      children: [
                        (C {(cd)} {(DQ (svn_project/) ($ VSub_Name '$subdir'))})
                        (While
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other '[')} {($ VSub_Pound '$#')} {(-gt)} {(0)} {(Lit_Other ']')})
                              terminator: <Op_Semi ';'>
                            )
                          ]
                          body: 
                            (DoGroup
                              children: [
                                (AndOr
                                  children: [
                                    (C {(test)} 
                                      {
                                        (DQ 
                                          (CommandSubPart
                                            command_list: 
                                              (CommandList
                                                children: [
                                                  (C {(svn_cmd)} {(propget)} {(DQ ($ VSub_Number '$1'))} 
                                                    {(DQ ($ VSub_Name '$file'))}
                                                  )
                                                ]
                                              )
                                            left_token: <Left_CommandSub '$('>
                                            spids: [325 337]
                                          )
                                        )
                                      } {(Lit_Other '=')} {(DQ ($ VSub_Number '$2'))}
                                    )
                                    (C {(exit)} {(1)})
                                  ]
                                  op_id: Op_DPipe
                                )
                                (Sentence
                                  child: (C {(shift)})
                                  terminator: <Op_Semi ';'>
                                )
                                (Sentence
                                  child: (C {(shift)})
                                  terminator: <Op_Semi ';'>
                                )
                              ]
                              spids: [319 359]
                            )
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                )
              spids: [288 360]
            )
          ]
          spids: [267]
        )
      spids: [262 266]
    )
    (C {(test_expect_success)} {(SQ <'add props top level'>)} 
      {
        (SQ <'\n'> <'\tset_props "." "foo" "svn:keywords" "FreeBSD=%H" &&\n'> 
          <'\tgit svn dcommit &&\n'> <'\tsvn_cmd co "$svnrepo" svn_project &&\n'> 
          <'\tconfirm_props "." "foo" "svn:keywords" "FreeBSD=%H" &&\n'> <'\trm -rf svn_project\n'> <'\t'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add multiple props'>)} 
      {
        (SQ <'\n'> <'\tset_props "." "foo" \\\n'> 
          <'\t\t"svn:keywords" "FreeBSD=%H" fbsd:nokeywords yes &&\n'> <'\tgit svn dcommit &&\n'> <'\tsvn_cmd co "$svnrepo" svn_project &&\n'> 
          <'\tconfirm_props "." "foo" \\\n'> <'\t\t"svn:keywords" "FreeBSD=%H" fbsd:nokeywords yes &&\n'> <'\trm -rf svn_project\n'> <'\t'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add props subdir'>)} 
      {
        (SQ <'\n'> <'\tset_props "." "$foo_subdir2" svn:keywords "FreeBSD=%H" &&\n'> 
          <'\tgit svn dcommit &&\n'> <'\tsvn_cmd co "$svnrepo" svn_project &&\n'> 
          <'\tconfirm_props "." "$foo_subdir2" "svn:keywords" "FreeBSD=%H" &&\n'> <'\trm -rf svn_project\n'> <'\t'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'add props relative'>)} 
      {
        (SQ <'\n'> <'\tset_props "subdir/subdir2" "../foo_subdir" \\\n'> 
          <'\t\tsvn:keywords "FreeBSD=%H" &&\n'> <'\tgit svn dcommit &&\n'> <'\tsvn_cmd co "$svnrepo" svn_project &&\n'> 
          <'\tconfirm_props "subdir/subdir2" "../foo_subdir" \\\n'> <'\t\tsvn:keywords "FreeBSD=%H" &&\n'> <'\trm -rf svn_project\n'> <'\t'>
        )
      }
    )
    (C {(test_done)})
  ]
)