(command.CommandList
  children: [
    (C {<.>} {<'./test-lib.sh'>})
    (C {<unset>} {<CVS_SERVER>})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{<type>} {<cvs>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<'/dev/null'>}
                    )
                    (redir
                      op: <Id.Redir_GreatAnd '2>&'>
                      loc: (redir_loc.Fd fd:2)
                      arg: {<1>}
                    )
                  ]
                  do_fork: T
                )
              ]
              negated: T
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping cvsimport tests, cvs not found'>)}
                  spids: [31]
                )
              ]
            )
            (C {<test_done>})
          ]
          spids: [14 28]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CVS)
          op: assign_op.Equal
          rhs: {(DQ <'cvs -f'>)}
          spids: [42]
        )
      ]
    )
    (C {<export>} {<CVS>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:cvsps_version)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Pipeline
                    children: [
                      (command.Simple
                        words: [{<cvsps>} {<-h>}]
                        redirects: [
                          (redir
                            op: <Id.Redir_GreatAnd '2>&'>
                            loc: (redir_loc.Fd fd:2)
                            arg: {<1>}
                          )
                        ]
                        do_fork: T
                      )
                      (C {<sed>} {<-ne>} {(SQ <'s/cvsps version //p'>)})
                    ]
                    negated: F
                  )
              )
            }
          spids: [52]
        )
      ]
    )
    (command.Case
      to_match: {(DQ ($ Id.VSub_DollarName '$cvsps_version'))}
      arms: [
        (case_arm pat_list:[{<2.1>} {<2.2> <Id.Lit_Star '*'>}] spids:[80 86 89 -1])
        (case_arm
          pat_list: [{(SQ )}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping cvsimport tests, cvsps not found'>)}
                  spids: [96]
                )
              ]
            )
            (C {<test_done>})
          ]
          spids: [91 93 105 -1]
        )
        (case_arm
          pat_list: [{<Id.Lit_Star '*'>}]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping cvsimport tests, unsupported cvsps version'>)}
                  spids: [111]
                )
              ]
            )
            (C {<test_done>})
          ]
          spids: [107 108 120 -1]
        )
      ]
    )
    (command.ShFunction
      name: setup_cvs_test_repository
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:CVSROOT)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>})) 
                            <'/.cvsroot'>
                          )
                        }
                      spids: [133]
                    )
                  ]
                )
                (C {<cp>} {<-r>} 
                  {
                    (DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY') <'/'> ($ Id.VSub_Number '$1') 
                      <'/cvsroot'>
                    )
                  } {(DQ ($ Id.VSub_DollarName '$CVSROOT'))}
                )
                (C {<export>} {<CVSROOT>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_cvs_co
      body: 
        (BraceGroup
          children: [
            (C {<rm>} {<-rf>} {<module-cvs-> (DQ ($ Id.VSub_Number '$1'))})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_Number '$1'))} {<Id.Lit_Equals '='>} 
                      {(DQ <master>)} {<Id.Lit_RBracket ']'>}
                    )
                  ]
                  action: [
                    (C {($ Id.VSub_DollarName '$CVS')} {<co>} {<-P>} {<-d>} 
                      {<module-cvs-> (DQ ($ Id.VSub_Number '$1'))} {<-A>} {<module>}
                    )
                  ]
                  spids: [191 208]
                )
              ]
              else_action: [
                (C {($ Id.VSub_DollarName '$CVS')} {<co>} {<-P>} {<-d>} 
                  {<module-cvs-> (DQ ($ Id.VSub_Number '$1'))} {<-r>} {(DQ ($ Id.VSub_Number '$1'))} {<module>}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: test_git_co
      body: 
        (BraceGroup
          children: [
            (command.Subshell
              child: 
                (command.AndOr
                  ops: [Id.Op_DAmp]
                  children: [
                    (C {<cd>} {<module-git>})
                    (C {<git>} {<checkout>} {(DQ ($ Id.VSub_Number '$1'))})
                  ]
                )
            )
          ]
        )
    )
    (command.ShFunction
      name: test_cmp_branch_file
      body: 
        (BraceGroup
          children: [
            (C {<test_cmp>} 
              {<module-cvs-> (DQ ($ Id.VSub_Number '$1')) <'/'> (DQ ($ Id.VSub_Number '$2'))} {<'module-git/'> (DQ ($ Id.VSub_Number '$2'))}
            )
          ]
        )
    )
    (command.ShFunction
      name: test_cmp_branch_tree
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {<test_cvs_co>} {(DQ ($ Id.VSub_Number '$1'))})
                (C {<test_git_co>} {(DQ ($ Id.VSub_Number '$1'))})
                (command.Pipeline
                  children: [
                    (command.Subshell
                      child: 
                        (command.CommandList
                          children: [
                            (C {<cd>} {<module-cvs-> (DQ ($ Id.VSub_Number '$1'))})
                            (C {<find>} {<.>} {<-type>} {<d>} {<-name>} {<CVS>} {<-prune>} {<-o>} {<-type>} 
                              {<f>} {<-print>}
                            )
                          ]
                        )
                    )
                    (command.Simple
                      words: [{<sort>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<module-cvs-> (DQ ($ Id.VSub_Number '$1')) <.list>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  negated: F
                )
                (command.Pipeline
                  children: [
                    (command.Subshell
                      child: 
                        (command.CommandList
                          children: [
                            (C {<cd>} {<module-git>})
                            (C {<find>} {<.>} {<-type>} {<d>} {<-name>} {<.git>} {<-prune>} {<-o>} {<-type>} 
                              {<f>} {<-print>}
                            )
                          ]
                        )
                    )
                    (command.Simple
                      words: [{<sort>}]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {<module-git-> (DQ ($ Id.VSub_Number '$1')) <.list>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  negated: F
                )
                (C {<test_cmp>} {<module-cvs-> (DQ ($ Id.VSub_Number '$1')) <.list>} 
                  {<module-git-> (DQ ($ Id.VSub_Number '$1')) <.list>}
                )
                (command.Pipeline
                  children: [
                    (C {<cat>} {<module-cvs-> (DQ ($ Id.VSub_Number '$1')) <.list>})
                    (command.WhileUntil
                      keyword: <Id.KW_While while>
                      cond: [(C {<read>} {<f>})]
                      body: 
                        (command.DoGroup
                          children: [
                            (command.AndOr
                              ops: [Id.Op_DPipe]
                              children: [
                                (C {<test_cmp_branch_file>} {(DQ ($ Id.VSub_Number '$1'))} 
                                  {(DQ ($ Id.VSub_DollarName '$f'))}
                                )
                                (command.ControlFlow
                                  token: <Id.ControlFlow_Return return>
                                  arg_word: {<1>}
                                )
                              ]
                            )
                          ]
                        )
                    )
                  ]
                  negated: F
                )
              ]
            )
          ]
        )
    )
  ]
)