(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'test_description='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'test_description='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'test_description='> name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'git-cvsserver -kb modes\n'> <'\n'> 
                <'tests -kb mode for binary files when accessing a git\n'> <'repository using cvs CLI client via git-cvsserver server'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [{<.>} {<'./test-lib.sh'>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <marked_as>
      name: marked_as
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'foundEntry='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'foundEntry='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'foundEntry='> name:foundEntry)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <grep>
                              more_env: []
                              words: [
                                {<grep>}
                                {(DQ <'^/'> ($ Id.VSub_Number 2) <'/'>)}
                                {(DQ ($ Id.VSub_Number 1) <'/CVS/Entries'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<x> (DQ ($ Id.VSub_DollarName foundEntry))}
                                {<Id.Lit_Equals '='>}
                                {<x> (DQ )}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'NOT FOUND: '> ($ Id.VSub_Number 1) <' '> ($ Id.VSub_Number 2) <' 1 '> 
                            ($ Id.VSub_Number 3)
                          )
                        }
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_DGreat '>>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ (${ Id.VSub_Name WORKDIR) <'/marked.log'>)}
                        )
                      ]
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [57 76]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <test>
              more_env: []
              words: [
                {<test>}
                {<x> 
                  (DQ 
                    (CommandSub
                      left_token: <Id.Left_DollarParen '$('>
                      child: 
                        (command.Pipeline
                          children: [
                            (command.Simple
                              blame_tok: <grep>
                              more_env: []
                              words: [
                                {<grep>}
                                {(DQ <'^/'> ($ Id.VSub_Number 2) <'/'>)}
                                {(DQ ($ Id.VSub_Number 1) <'/CVS/Entries'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.Simple
                              blame_tok: <cut>
                              more_env: []
                              words: [{<cut>} {<'-d/'>} {<-f5>}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          ops: [<Id.Op_Pipe _>]
                        )
                      right: <Id.Eof_RParen _>
                    )
                  )
                }
                {<Id.Lit_Equals '='>}
                {<x> (DQ ($ Id.VSub_Number 3))}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'stat='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'stat='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'stat='> name:stat)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '?')}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [
                {<echo>}
                {
                  (DQ ($ Id.VSub_Number 1) <' '> ($ Id.VSub_Number 2) <' '> ($ Id.VSub_DollarName stat) 
                    <' \''> ($ Id.VSub_Number 3) <'\''>
                  )
                }
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ (${ Id.VSub_Name WORKDIR) <'/marked.log'>)}
                )
              ]
              do_fork: T
            )
            (command.ControlFlow
              keyword: <Id.ControlFlow_Return return>
              arg_word: {($ Id.VSub_DollarName stat)}
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <not_present>
      name: not_present
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'foundEntry='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'foundEntry='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'foundEntry='> name:foundEntry)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <grep>
                              more_env: []
                              words: [
                                {<grep>}
                                {(DQ <'^/'> ($ Id.VSub_Number 2) <'/'>)}
                                {(DQ ($ Id.VSub_Number 1) <'/CVS/Entries'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<-r>}
                                {(DQ ($ Id.VSub_Number 1) <'/'> ($ Id.VSub_Number 2))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'Error: File still exists: '> ($ Id.VSub_Number 1) <' '> 
                            ($ Id.VSub_Number 2)
                          )
                        }
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_DGreat '>>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ (${ Id.VSub_Name WORKDIR) <'/marked.log'>)}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Sentence
                      child: 
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {<1>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [204 220]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<x> (DQ ($ Id.VSub_DollarName foundEntry))}
                                {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                {<x> (DQ )}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'Error: should not have found: '> ($ Id.VSub_Number 1) <' '> 
                            ($ Id.VSub_Number 2)
                          )
                        }
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_DGreat '>>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ (${ Id.VSub_Name WORKDIR) <'/marked.log'>)}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Sentence
                      child: 
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {<1>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [251 271]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [
                    {<echo>}
                    {(DQ <'Correctly not found: '> ($ Id.VSub_Number 1) <' '> ($ Id.VSub_Number 2))}
                  ]
                  redirects: [
                    (Redir
                      op: <Id.Redir_DGreat '>>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {(DQ (${ Id.VSub_Name WORKDIR) <'/marked.log'>)}
                    )
                  ]
                  do_fork: T
                )
                (command.Sentence
                  child: (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})
                  terminator: <Id.Op_Semi _>
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <check_status_options>
      name: check_status_options
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Subshell
              left: <Id.Op_LParen _>
              child: 
                (command.AndOr
                  children: [
                    (command.Simple
                      blame_tok: <cd>
                      more_env: []
                      words: [{<cd>} {(DQ ($ Id.VSub_Number 1))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <cvs>
                      more_env: [
                        (EnvPair
                          left: <Id.Lit_VarLike 'GIT_CONFIG='>
                          name: GIT_CONFIG
                          val: {(DQ ($ Id.VSub_DollarName git_config))}
                        )
                      ]
                      words: [{<cvs>} {<-Q>} {<status>} {(DQ ($ Id.VSub_Number 2))}]
                      redirects: [
                        (Redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ (${ Id.VSub_Name WORKDIR) <'/status.out'>)}
                        )
                        (Redir
                          op: <Id.Redir_GreatAnd '2>&'>
                          loc: (redir_loc.Fd fd:2)
                          arg: {<1>}
                        )
                      ]
                      do_fork: T
                    )
                  ]
                  ops: [<Id.Op_DAmp _>]
                )
              right: <Id.Right_Subshell _>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<x> (DQ ($ Id.VSub_QMark '?'))}
                                {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                                {<x> (DQ <0>)}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ <'Error from cvs status: '> ($ Id.VSub_Number 1) <' '> 
                            ($ Id.VSub_Number 2)
                          )
                        }
                      ]
                      redirects: [
                        (Redir
                          op: <Id.Redir_DGreat '>>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ (${ Id.VSub_Name WORKDIR) <'/marked.log'>)}
                        )
                      ]
                      do_fork: T
                    )
                    (command.Sentence
                      child: 
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {<1>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [380 401]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'got='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'got='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'got='> name:got)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSub
                          left_token: <Id.Left_DollarParen '$('>
                          child: 
                            (command.Simple
                              blame_tok: <sed>
                              more_env: []
                              words: [
                                {<sed>}
                                {<-n>}
                                {<-e>}
                                {(SQ <'s/^[ \t]*Sticky Options:[ \t]*//p'>)}
                                {(DQ (${ Id.VSub_Name WORKDIR) <'/status.out'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          right: <Id.Eof_RParen _>
                        )
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'expect='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'expect='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expect='> name:expect)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number 3))}
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<x> (DQ ($ Id.VSub_DollarName expect))}
                                {<Id.Lit_Equals '='>}
                                {<x> (DQ )}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'expect='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'expect='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'expect='> name:expect)
                          op: assign_op.Equal
                          rhs: {(DQ <'(none)'>)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [461 480]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <test>
              more_env: []
              words: [
                {<test>}
                {<x> (DQ ($ Id.VSub_DollarName got))}
                {<Id.Lit_Equals '='>}
                {<x> (DQ ($ Id.VSub_DollarName expect))}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'stat='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'stat='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'stat='> name:stat)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '?')}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [
                {<echo>}
                {
                  (DQ <'cvs status: '> ($ Id.VSub_Number 1) <' '> ($ Id.VSub_Number 2) <' '> 
                    ($ Id.VSub_DollarName stat) <' \''> ($ Id.VSub_Number 3) <'\' \''> ($ Id.VSub_DollarName got) <'\''>
                  )
                }
              ]
              redirects: [
                (Redir
                  op: <Id.Redir_DGreat '>>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {(DQ (${ Id.VSub_Name WORKDIR) <'/marked.log'>)}
                )
              ]
              do_fork: T
            )
            (command.ControlFlow
              keyword: <Id.ControlFlow_Return return>
              arg_word: {($ Id.VSub_DollarName stat)}
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <cvs>
      more_env: []
      words: [{<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
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {($ Id.VSub_QMark '?')} {<-ne>} {<1>}]
                  redirects: []
                  do_fork: T
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'skip_all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'skip_all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git-cvsserver tests, cvs not found'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [552 562]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Pipeline
                  negated: <Id.KW_Bang '!'>
                  children: [
                    (command.Simple
                      blame_tok: <test_have_prereq>
                      more_env: []
                      words: [{<test_have_prereq>} {<PERL>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  ops: []
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'skip_all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'skip_all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git-cvsserver tests, perl not available'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [575 583]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <perl>
          more_env: []
          words: [{<perl>} {<-e>} {(SQ <'use DBI; use DBD::SQLite'>)}]
          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
        )
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.ShAssignment
              left: <Id.Lit_VarLike 'skip_all='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'skip_all='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'skip_all='> name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git-cvsserver tests, Perl SQLite interface unavailable'>)}
                )
              ]
              redirects: []
            )
            (command.Simple
              blame_tok: <test_done>
              more_env: []
              words: [{<test_done>}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
      ]
      ops: [<Id.Op_DPipe _>]
    )
    (command.Simple
      blame_tok: <unset>
      more_env: []
      words: [{<unset>} {<GIT_DIR>} {<GIT_CONFIG>}]
      redirects: []
      do_fork: T
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'WORKDIR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'WORKDIR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'WORKDIR='> name:WORKDIR)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName PWD)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'SERVERDIR='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'SERVERDIR='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'SERVERDIR='> name:SERVERDIR)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName PWD) <'/gitcvs.git'>}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'git_config='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'git_config='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'git_config='> name:git_config)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName SERVERDIR) <'/config'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'CVSROOT='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'CVSROOT='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CVSROOT='> name:CVSROOT)
          op: assign_op.Equal
          rhs: {(DQ <':fork:'> ($ Id.VSub_DollarName SERVERDIR))}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'CVSWORK='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'CVSWORK='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CVSWORK='> name:CVSWORK)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName PWD) <'/cvswork'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'CVS_SERVER='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'CVS_SERVER='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CVS_SERVER='> name:CVS_SERVER)
          op: assign_op.Equal
          rhs: {<git-cvsserver>}
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <export>
      more_env: []
      words: [{<export>} {<CVSROOT>} {<CVS_SERVER>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <rm>
      more_env: []
      words: [{<rm>} {<-rf>} {(DQ ($ Id.VSub_DollarName CVSWORK))} {(DQ ($ Id.VSub_DollarName SERVERDIR))}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <setup>)}
        {
          (SQ <'\n'> <'    git config push.default matching &&\n'> 
            <'    echo "Simple text file" >textfile.c &&\n'> <'    echo "File with embedded NUL: Q <- there" | q_to_nul > binfile.bin &&\n'> 
            <'    mkdir subdir &&\n'> <'    echo "Another text file" > subdir/file.h &&\n'> 
            <'    echo "Another binary: Q (this time CR)" | q_to_cr > subdir/withCr.bin &&\n'> <'    echo "Mixed up NUL, but marked text: Q <- there" | q_to_nul > mixedUp.c &&\n'> 
            <'    echo "Unspecified" > subdir/unspecified.other &&\n'> <'    echo "/*.bin -crlf" > .gitattributes &&\n'> <'    echo "/*.c crlf" >> .gitattributes &&\n'> 
            <'    echo "subdir/*.bin -crlf" >> .gitattributes &&\n'> <'    echo "subdir/*.c crlf" >> .gitattributes &&\n'> 
            <'    echo "subdir/file.h crlf" >> .gitattributes &&\n'> <'    git add .gitattributes textfile.c binfile.bin mixedUp.c subdir/* &&\n'> 
            <'    git commit -q -m "First Commit" &&\n'> <'    git clone -q --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&\n'> 
            <'    GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&\n'> <'    GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log"\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cvs co (default crlf)'>)}
        {
          (SQ <'\n'> <'    GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&\n'> 
            <'    test x"$(grep '>
          ) <'/-k'> (SQ <' cvswork/CVS/Entries cvswork/subdir/CVS/Entries)" = x""\n'>)
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <rm>
      more_env: []
      words: [{<rm>} {<-rf>} {<cvswork>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cvs co (allbinary)'>)}
        {
          (SQ <'\n'> <'    GIT_DIR="$SERVERDIR" git config --bool gitcvs.allbinary true &&\n'> 
            <'    GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&\n'> <'    marked_as cvswork textfile.c -kb &&\n'> <'    marked_as cvswork binfile.bin -kb &&\n'> 
            <'    marked_as cvswork .gitattributes -kb &&\n'> <'    marked_as cvswork mixedUp.c -kb &&\n'> <'    marked_as cvswork/subdir withCr.bin -kb &&\n'> 
            <'    marked_as cvswork/subdir file.h -kb &&\n'> <'    marked_as cvswork/subdir unspecified.other -kb\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <rm>
      more_env: []
      words: [{<rm>} {<-rf>} {<cvswork>} {<cvs.log>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cvs co (use attributes/allbinary)'>)}
        {
          (SQ <'\n'> <'    GIT_DIR="$SERVERDIR" git config --bool gitcvs.usecrlfattr true &&\n'> 
            <'    GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&\n'> <'    marked_as cvswork textfile.c "" &&\n'> <'    marked_as cvswork binfile.bin -kb &&\n'> 
            <'    marked_as cvswork .gitattributes -kb &&\n'> <'    marked_as cvswork mixedUp.c "" &&\n'> <'    marked_as cvswork/subdir withCr.bin -kb &&\n'> 
            <'    marked_as cvswork/subdir file.h "" &&\n'> <'    marked_as cvswork/subdir unspecified.other -kb\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <rm>
      more_env: []
      words: [{<rm>} {<-rf>} {<cvswork>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cvs co (use attributes)'>)}
        {
          (SQ <'\n'> <'    GIT_DIR="$SERVERDIR" git config --bool gitcvs.allbinary false &&\n'> 
            <'    GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&\n'> <'    marked_as cvswork textfile.c "" &&\n'> <'    marked_as cvswork binfile.bin -kb &&\n'> 
            <'    marked_as cvswork .gitattributes "" &&\n'> <'    marked_as cvswork mixedUp.c "" &&\n'> <'    marked_as cvswork/subdir withCr.bin -kb &&\n'> 
            <'    marked_as cvswork/subdir file.h "" &&\n'> <'    marked_as cvswork/subdir unspecified.other ""\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'adding files'>)}
        {
          (SQ <'\n'> <'    (cd cvswork &&\n'> <'    (cd subdir &&\n'> 
            <'    echo "more text" > src.c &&\n'> <'    GIT_CONFIG="$git_config" cvs -Q add src.c >cvs.log 2>&1 &&\n'> <'    marked_as . src.c "" &&\n'> 
            <'    echo "pseudo-binary" > temp.bin\n'> <'    ) &&\n'> <'    GIT_CONFIG="$git_config" cvs -Q add subdir/temp.bin >cvs.log 2>&1 &&\n'> 
            <'    marked_as subdir temp.bin "-kb" &&\n'> <'    cd subdir &&\n'> <'    GIT_CONFIG="$git_config" cvs -Q ci -m "adding files" >cvs.log 2>&1 &&\n'> 
            <'    marked_as . temp.bin "-kb" &&\n'> <'    marked_as . src.c ""\n'> <'    )\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <updating>)}
        {(SQ <'\n'> <'    git pull gitcvs.git &&\n'> <'    echo '>) <hi> 
          (SQ <' > subdir/newfile.bin &&\n'> <'    echo '>) <junk> (SQ <' > subdir/file.h &&\n'> <'    echo '>) <hi> (SQ <' > subdir/newfile.c &&\n'> <'    echo '>) 
          <hello> 
          (SQ <' >> binfile.bin &&\n'> 
            <'    git add subdir/newfile.bin subdir/file.h subdir/newfile.c binfile.bin &&\n'> <'    git commit -q -m "Add and change some files" &&\n'> <'    git push gitcvs.git >/dev/null &&\n'> 
            <'    (cd cvswork &&\n'> <'    GIT_CONFIG="$git_config" cvs -Q update\n'> <'    ) &&\n'> 
            <'    marked_as cvswork textfile.c "" &&\n'> <'    marked_as cvswork binfile.bin -kb &&\n'> <'    marked_as cvswork .gitattributes "" &&\n'> 
            <'    marked_as cvswork mixedUp.c "" &&\n'> <'    marked_as cvswork/subdir withCr.bin -kb &&\n'> <'    marked_as cvswork/subdir file.h "" &&\n'> 
            <'    marked_as cvswork/subdir unspecified.other "" &&\n'> <'    marked_as cvswork/subdir newfile.bin -kb &&\n'> 
            <'    marked_as cvswork/subdir newfile.c "" &&\n'> <'    echo "File with embedded NUL: Q <- there" | q_to_nul > tmpExpect1 &&\n'> 
            <'    echo "hello" >> tmpExpect1 &&\n'> <'    cmp cvswork/binfile.bin tmpExpect1\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <rm>
      more_env: []
      words: [{<rm>} {<-rf>} {<cvswork>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cvs co (use attributes/guess)'>)}
        {
          (SQ <'\n'> <'    GIT_DIR="$SERVERDIR" git config gitcvs.allbinary guess &&\n'> 
            <'    GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&\n'> <'    marked_as cvswork textfile.c "" &&\n'> <'    marked_as cvswork binfile.bin -kb &&\n'> 
            <'    marked_as cvswork .gitattributes "" &&\n'> <'    marked_as cvswork mixedUp.c "" &&\n'> <'    marked_as cvswork/subdir withCr.bin -kb &&\n'> 
            <'    marked_as cvswork/subdir file.h "" &&\n'> <'    marked_as cvswork/subdir unspecified.other "" &&\n'> 
            <'    marked_as cvswork/subdir newfile.bin -kb &&\n'> <'    marked_as cvswork/subdir newfile.c ""\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'setup multi-line files'>)}
        {
          (SQ <'\n'> <'    ( echo "line 1" &&\n'> <'      echo "line 2" &&\n'> 
            <'      echo "line 3" &&\n'> <'      echo "line 4 with NUL: Q <-" ) | q_to_nul > multiline.c &&\n'> 
            <'    git add multiline.c &&\n'> <'    ( echo "line 1" &&\n'> <'      echo "line 2" &&\n'> <'      echo "line 3" &&\n'> 
            <'      echo "line 4" ) | q_to_nul > multilineTxt.c &&\n'> <'    git add multilineTxt.c &&\n'> <'    git commit -q -m "multiline files" &&\n'> 
            <'    git push gitcvs.git >/dev/null\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <rm>
      more_env: []
      words: [{<rm>} {<-rf>} {<cvswork>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cvs co (guess)'>)}
        {
          (SQ <'\n'> <'    GIT_DIR="$SERVERDIR" git config --bool gitcvs.usecrlfattr false &&\n'> 
            <'    GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&\n'> <'    marked_as cvswork textfile.c "" &&\n'> <'    marked_as cvswork binfile.bin -kb &&\n'> 
            <'    marked_as cvswork .gitattributes "" &&\n'> <'    marked_as cvswork mixedUp.c -kb &&\n'> <'    marked_as cvswork multiline.c -kb &&\n'> 
            <'    marked_as cvswork multilineTxt.c "" &&\n'> <'    marked_as cvswork/subdir withCr.bin -kb &&\n'> <'    marked_as cvswork/subdir file.h "" &&\n'> 
            <'    marked_as cvswork/subdir unspecified.other "" &&\n'> <'    marked_as cvswork/subdir newfile.bin "" &&\n'> <'    marked_as cvswork/subdir newfile.c ""\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cvs co another copy (guess)'>)}
        {
          (SQ <'\n'> <'    GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n'> 
            <'    marked_as cvswork2 textfile.c "" &&\n'> <'    marked_as cvswork2 binfile.bin -kb &&\n'> <'    marked_as cvswork2 .gitattributes "" &&\n'> 
            <'    marked_as cvswork2 mixedUp.c -kb &&\n'> <'    marked_as cvswork2 multiline.c -kb &&\n'> <'    marked_as cvswork2 multilineTxt.c "" &&\n'> 
            <'    marked_as cvswork2/subdir withCr.bin -kb &&\n'> <'    marked_as cvswork2/subdir file.h "" &&\n'> 
            <'    marked_as cvswork2/subdir unspecified.other "" &&\n'> <'    marked_as cvswork2/subdir newfile.bin "" &&\n'> <'    marked_as cvswork2/subdir newfile.c ""\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cvs status - sticky options'>)}
        {
          (SQ <'\n'> <'    check_status_options cvswork2 textfile.c "" &&\n'> 
            <'    check_status_options cvswork2 binfile.bin -kb &&\n'> <'    check_status_options cvswork2 .gitattributes "" &&\n'> 
            <'    check_status_options cvswork2 mixedUp.c -kb &&\n'> <'    check_status_options cvswork2 multiline.c -kb &&\n'> 
            <'    check_status_options cvswork2 multilineTxt.c "" &&\n'> <'    check_status_options cvswork2/subdir withCr.bin -kb &&\n'> 
            <'    check_status_options cvswork2 subdir/withCr.bin -kb &&\n'> <'    check_status_options cvswork2/subdir file.h "" &&\n'> 
            <'    check_status_options cvswork2 subdir/file.h "" &&\n'> <'    check_status_options cvswork2/subdir unspecified.other "" &&\n'> 
            <'    check_status_options cvswork2/subdir newfile.bin "" &&\n'> <'    check_status_options cvswork2/subdir newfile.c ""\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'add text (guess)'>)}
        {
          (SQ <'\n'> <'    (cd cvswork &&\n'> <'    echo "simpleText" > simpleText.c &&\n'> 
            <'    GIT_CONFIG="$git_config" cvs -Q add simpleText.c\n'> <'    ) &&\n'> <'    marked_as cvswork simpleText.c ""\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'add bin (guess)'>)}
        {
          (SQ <'\n'> <'    (cd cvswork &&\n'> 
            <'    echo "simpleBin: NUL: Q <- there" | q_to_nul > simpleBin.bin &&\n'> <'    GIT_CONFIG="$git_config" cvs -Q add simpleBin.bin\n'> <'    ) &&\n'> 
            <'    marked_as cvswork simpleBin.bin -kb\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'remove files (guess)'>)}
        {
          (SQ <'\n'> <'    (cd cvswork &&\n'> 
            <'    GIT_CONFIG="$git_config" cvs -Q rm -f subdir/file.h &&\n'> <'    (cd subdir &&\n'> <'    GIT_CONFIG="$git_config" cvs -Q rm -f withCr.bin\n'> <'    )) &&\n'> 
            <'    marked_as cvswork/subdir withCr.bin -kb &&\n'> <'    marked_as cvswork/subdir file.h ""\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'cvs ci (guess)'>)}
        {
          (SQ <'\n'> <'    (cd cvswork &&\n'> 
            <'    GIT_CONFIG="$git_config" cvs -Q ci -m "add/rm files" >cvs.log 2>&1\n'> <'    ) &&\n'> <'    marked_as cvswork textfile.c "" &&\n'> 
            <'    marked_as cvswork binfile.bin -kb &&\n'> <'    marked_as cvswork .gitattributes "" &&\n'> <'    marked_as cvswork mixedUp.c -kb &&\n'> 
            <'    marked_as cvswork multiline.c -kb &&\n'> <'    marked_as cvswork multilineTxt.c "" &&\n'> <'    not_present cvswork/subdir withCr.bin &&\n'> 
            <'    not_present cvswork/subdir file.h &&\n'> <'    marked_as cvswork/subdir unspecified.other "" &&\n'> 
            <'    marked_as cvswork/subdir newfile.bin "" &&\n'> <'    marked_as cvswork/subdir newfile.c "" &&\n'> <'    marked_as cvswork simpleBin.bin -kb &&\n'> 
            <'    marked_as cvswork simpleText.c ""\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'update subdir of other copy (guess)'>)}
        {
          (SQ <'\n'> <'    (cd cvswork2/subdir &&\n'> <'    GIT_CONFIG="$git_config" cvs -Q update\n'> 
            <'    ) &&\n'> <'    marked_as cvswork2 textfile.c "" &&\n'> <'    marked_as cvswork2 binfile.bin -kb &&\n'> 
            <'    marked_as cvswork2 .gitattributes "" &&\n'> <'    marked_as cvswork2 mixedUp.c -kb &&\n'> <'    marked_as cvswork2 multiline.c -kb &&\n'> 
            <'    marked_as cvswork2 multilineTxt.c "" &&\n'> <'    not_present cvswork2/subdir withCr.bin &&\n'> <'    not_present cvswork2/subdir file.h &&\n'> 
            <'    marked_as cvswork2/subdir unspecified.other "" &&\n'> <'    marked_as cvswork2/subdir newfile.bin "" &&\n'> 
            <'    marked_as cvswork2/subdir newfile.c "" &&\n'> <'    not_present cvswork2 simpleBin.bin &&\n'> <'    not_present cvswork2 simpleText.c\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <echo>
      more_env: []
      words: [{<echo>} {(DQ <'starting update/merge'>)}]
      redirects: [
        (Redir
          op: <Id.Redir_DGreat '>>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(DQ (${ Id.VSub_Name WORKDIR) <'/marked.log'>)}
        )
      ]
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_expect_success>
      more_env: []
      words: [
        {<test_expect_success>}
        {(SQ <'update/merge full other copy (guess)'>)}
        {
          (SQ <'\n'> <'    git pull gitcvs.git master &&\n'> 
            <'    sed "s/3/replaced_3/" < multilineTxt.c > ml.temp &&\n'> <'    mv ml.temp multilineTxt.c &&\n'> <'    git add multilineTxt.c &&\n'> 
            <'    git commit -q -m "modify multiline file" >> "${WORKDIR}/marked.log" &&\n'> <'    git push gitcvs.git >/dev/null &&\n'> <'    (cd cvswork2 &&\n'> 
            <'    sed "s/1/replaced_1/" < multilineTxt.c > ml.temp &&\n'> <'    mv ml.temp multilineTxt.c &&\n'> <'    GIT_CONFIG="$git_config" cvs update > cvs.log 2>&1\n'> 
            <'    ) &&\n'> <'    marked_as cvswork2 textfile.c "" &&\n'> <'    marked_as cvswork2 binfile.bin -kb &&\n'> 
            <'    marked_as cvswork2 .gitattributes "" &&\n'> <'    marked_as cvswork2 mixedUp.c -kb &&\n'> <'    marked_as cvswork2 multiline.c -kb &&\n'> 
            <'    marked_as cvswork2 multilineTxt.c "" &&\n'> <'    not_present cvswork2/subdir withCr.bin &&\n'> <'    not_present cvswork2/subdir file.h &&\n'> 
            <'    marked_as cvswork2/subdir unspecified.other "" &&\n'> <'    marked_as cvswork2/subdir newfile.bin "" &&\n'> 
            <'    marked_as cvswork2/subdir newfile.c "" &&\n'> <'    marked_as cvswork2 simpleBin.bin -kb &&\n'> <'    marked_as cvswork2 simpleText.c "" &&\n'> 
            <'    echo "line replaced_1" > tmpExpect2 &&\n'> <'    echo "line 2" >> tmpExpect2 &&\n'> <'    echo "line replaced_3" >> tmpExpect2 &&\n'> 
            <'    echo "line 4" | q_to_nul >> tmpExpect2 &&\n'> <'    cmp cvswork2/multilineTxt.c tmpExpect2\n'>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <test_done>
      more_env: []
      words: [{<test_done>}]
      redirects: []
      do_fork: T
    )
  ]
)