(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ <'git-cvsserver access\n'> <'\n'> 
                <'tests read access to a git repository with the\n'> <'cvs CLI client via git-cvsserver server'>
              )
            }
          spids: [13]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (command.Pipeline children:[(C {<test_have_prereq>} {<PERL>})] negated:T)
              terminator: <Id.Op_Semi _>
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git cvsserver tests, perl not available'>)}
                  spids: [39]
                )
              ]
            )
            (C {<test_done>})
          ]
          spids: [27 36]
        )
      ]
    )
    (command.Simple
      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
      arms: [
        (if_arm
          cond: [(C {<test>} {($ Id.VSub_QMark '$?')} {<-ne>} {<1>})]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git-cvsserver tests, cvs not found'>)}
                  spids: [70]
                )
              ]
            )
            (C {<test_done>})
          ]
          spids: [57 67]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.Simple
          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
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: {(SQ <'skipping git-cvsserver tests, Perl SQLite interface unavailable'>)}
                  spids: [99]
                )
              ]
            )
            (C {<test_done>})
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:WORKDIR)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$PWD')}
          spids: [110]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SERVERDIR)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$PWD') <'/gitcvs.git'>}
          spids: [113]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:git_config)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$SERVERDIR') <'/config'>)}
          spids: [117]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CVSROOT)
          op: assign_op.Equal
          rhs: {(DQ <':fork:'> ($ Id.VSub_DollarName '$SERVERDIR'))}
          spids: [123]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CVSWORK)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$PWD') <'/cvswork'>)}
          spids: [129]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CVS_SERVER)
          op: assign_op.Equal
          rhs: {<git-cvsserver>}
          spids: [135]
        )
      ]
    )
    (C {<export>} {<CVSROOT>} {<CVS_SERVER>})
    (C {<rm>} {<-rf>} {(DQ ($ Id.VSub_DollarName '$CVSWORK'))} {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))})
    (C {<test_expect_success>} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'  git config push.default matching &&\n'> <'  echo >empty &&\n'> 
          <'  git add empty &&\n'> <'  git commit -q -m "First Commit" &&\n'> <'  mkdir secondroot &&\n'> <'  ( cd secondroot &&\n'> 
          <'  git init &&\n'> <'  touch secondrootfile &&\n'> <'  git add secondrootfile &&\n'> 
          <'  git commit -m "second root") &&\n'> <'  git fetch secondroot master &&\n'> <'  git merge --allow-unrelated-histories FETCH_HEAD &&\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'> <'  GIT_DIR="$SERVERDIR" git config gitcvs.authdb "$SERVERDIR/auth.db" &&\n'> 
          <'  echo cvsuser:cvGVEarMLnhlA > "$SERVERDIR/auth.db"\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'basic checkout'>)} 
      {
        (SQ <'GIT_CONFIG="$git_config" cvs -Q co -d cvswork master &&\n'> 
          <
'   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | head -n 1))" = "empty/1.1/" &&\n'
          > 
          <
'   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | sed -ne \\$p))" = "secondrootfile/1.1/"'
          >
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<request-anonymous>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 231
              stdin_parts: [
                <'BEGIN AUTH REQUEST\n'>
                ($ Id.VSub_DollarName '$SERVERDIR')
                <'\n'>
                <'anonymous\n'>
                <'\n'>
                <'END AUTH REQUEST\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<request-git>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 248
              stdin_parts: [
                <'BEGIN AUTH REQUEST\n'>
                ($ Id.VSub_DollarName '$SERVERDIR')
                <'\n'>
                <'git\n'>
                <'\n'>
                <'END AUTH REQUEST\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<login-anonymous>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 265
              stdin_parts: [
                <'BEGIN VERIFICATION REQUEST\n'>
                ($ Id.VSub_DollarName '$SERVERDIR')
                <'\n'>
                <'anonymous\n'>
                <'\n'>
                <'END VERIFICATION REQUEST\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<login-git>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 282
              stdin_parts: [
                <'BEGIN VERIFICATION REQUEST\n'>
                ($ Id.VSub_DollarName '$SERVERDIR')
                <'\n'>
                <'git\n'>
                <'\n'>
                <'END VERIFICATION REQUEST\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<login-git-ok>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 299
              stdin_parts: [
                <'BEGIN VERIFICATION REQUEST\n'>
                ($ Id.VSub_DollarName '$SERVERDIR')
                <'\n'>
                <'cvsuser\n'>
                <'Ah<Z:yZZ30 e\n'>
                <'END VERIFICATION REQUEST\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'pserver authentication'>)} 
      {
        (SQ <'cat request-anonymous | git-cvsserver pserver >log 2>&1 &&\n'> 
          <'   sed -ne \\$p log | grep "^I LOVE YOU\\$"'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'pserver authentication failure (non-anonymous user)'>)} 
      {
        (SQ <'if cat request-git | git-cvsserver pserver >log 2>&1\n'> <'   then\n'> <'       false\n'> 
          <'   else\n'> <'       true\n'> <'   fi &&\n'> <'   sed -ne \\$p log | grep "^I HATE YOU\\$"'>
        )
      }
    )
    (C {<test_expect_success>} 
      {(SQ <'pserver authentication success (non-anonymous user with password)'>)} 
      {
        (SQ <'cat login-git-ok | git-cvsserver pserver >log 2>&1 &&\n'> 
          <'   sed -ne \\$p log | grep "^I LOVE YOU\\$"'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'pserver authentication (login)'>)} 
      {
        (SQ <'cat login-anonymous | git-cvsserver pserver >log 2>&1 &&\n'> 
          <'   sed -ne \\$p log | grep "^I LOVE YOU\\$"'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'pserver authentication failure (login/non-anonymous user)'>)} 
      {
        (SQ <'if cat login-git | git-cvsserver pserver >log 2>&1\n'> <'   then\n'> <'       false\n'> 
          <'   else\n'> <'       true\n'> <'   fi &&\n'> <'   sed -ne \\$p log | grep "^I HATE YOU\\$"'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<request-relative>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 400
              stdin_parts: [
                <'BEGIN AUTH REQUEST\n'>
                <'gitcvs.git\n'>
                <'anonymous\n'>
                <'\n'>
                <'END AUTH REQUEST\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<request-conflict>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 420
              stdin_parts: [
                <'BEGIN AUTH REQUEST\n'>
                ($ Id.VSub_DollarName '$SERVERDIR')
                <'\n'>
                <'anonymous\n'>
                <'\n'>
                <'END AUTH REQUEST\n'>
                <'Root '>
                ($ Id.VSub_DollarName '$WORKDIR')
                <'\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'req_Root failure (relative pathname)'>)} 
      {
        (SQ <'if cat request-relative | git-cvsserver pserver >log 2>&1\n'> <'   then\n'> 
          <'       echo unexpected success\n'> <'       false\n'> <'   else\n'> <'       true\n'> <'   fi &&\n'> 
          <'   tail log | grep "^error 1 Root must be an absolute pathname$"'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'req_Root failure (conflicting roots)'>)} 
      {
        (SQ <'cat request-conflict | git-cvsserver pserver >log 2>&1 &&\n'> 
          <'   tail log | grep "^error 1 Conflicting roots specified$"'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'req_Root (strict paths)'>)} 
      {
        (SQ 
          <
'cat request-anonymous | git-cvsserver --strict-paths pserver "$SERVERDIR" >log 2>&1 &&\n'
          > <'   sed -ne \\$p log | grep "^I LOVE YOU\\$"'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'req_Root failure (strict-paths)'>)} 
      {
        (SQ <'\n'> <'    ! cat request-anonymous |\n'> 
          <'    git-cvsserver --strict-paths pserver "$WORKDIR" >log 2>&1\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'req_Root (w/o strict-paths)'>)} 
      {
        (SQ <'cat request-anonymous | git-cvsserver pserver "$WORKDIR/" >log 2>&1 &&\n'> 
          <'   sed -ne \\$p log | grep "^I LOVE YOU\\$"'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'req_Root failure (w/o strict-paths)'>)} 
      {
        (SQ <'\n'> <'    ! cat request-anonymous |\n'> 
          <'    git-cvsserver pserver "$WORKDIR/gitcvs" >log 2>&1\n'>
        )
      }
    )
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<request-base>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 525
              stdin_parts: [
                <'BEGIN AUTH REQUEST\n'>
                <'/gitcvs.git\n'>
                <'anonymous\n'>
                <'\n'>
                <'END AUTH REQUEST\n'>
                <'Root /gitcvs.git\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<test_expect_success>} {(SQ <'req_Root (base-path)'>)} 
      {
        (SQ 
          <
'cat request-base | git-cvsserver --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&\n'
          > <'   sed -ne \\$p log | grep "^I LOVE YOU\\$"'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'req_Root failure (base-path)'>)} 
      {
        (SQ <'\n'> <'    ! cat request-anonymous |\n'> 
          <
'    git-cvsserver --strict-paths --base-path "$WORKDIR" pserver "$SERVERDIR" >log 2>&1\n'
          >
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.Simple
          words: [{<git>} {<config>} {<--bool>} {<gitcvs.enabled>} {<false>}]
          more_env: [
            (env_pair
              name: GIT_DIR
              val: {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))}
              spids: [554]
            )
          ]
          do_fork: T
        )
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (C {<test_expect_success>} {(SQ <'req_Root (export-all)'>)} 
      {
        (SQ <'cat request-anonymous | git-cvsserver --export-all pserver "$WORKDIR" >log 2>&1 &&\n'> 
          <'   sed -ne \\$p log | grep "^I LOVE YOU\\$"'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'req_Root failure (export-all w/o whitelist)'>)} 
      {(SQ <'! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)'>)}
    )
    (C {<test_expect_success>} {(SQ <'req_Root (everything together)'>)} 
      {
        (SQ 
          <
'cat request-base | git-cvsserver --export-all --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&\n'
          > <'   sed -ne \\$p log | grep "^I LOVE YOU\\$"'>
        )
      }
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.Simple
          words: [{<git>} {<config>} {<--bool>} {<gitcvs.enabled>} {<true>}]
          more_env: [
            (env_pair
              name: GIT_DIR
              val: {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))}
              spids: [617]
            )
          ]
          do_fork: T
        )
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (C {<test_expect_success>} {(SQ <'gitcvs.enabled = false'>)} 
      {
        (SQ <'GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false &&\n'> 
          <'   if GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1\n'> <'   then\n'> <'     echo unexpected cvs success\n'> <'     false\n'> <'   else\n'> <'     true\n'> 
          <'   fi &&\n'> <'   grep "GITCVS emulation disabled" cvs.log &&\n'> <'   test ! -d cvswork2'>
        )
      }
    )
    (C {<rm>} {<-fr>} {<cvswork2>})
    (C {<test_expect_success>} {(SQ <'gitcvs.ext.enabled = true'>)} 
      {
        (SQ <'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n'> 
          <'   GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false &&\n'> <'   GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n'> 
          <'   test_cmp cvswork cvswork2'>
        )
      }
    )
    (C {<rm>} {<-fr>} {<cvswork2>})
    (C {<test_expect_success>} {(SQ <'gitcvs.ext.enabled = false'>)} 
      {
        (SQ <'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled false &&\n'> 
          <'   GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&\n'> <'   if GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1\n'> <'   then\n'> 
          <'     echo unexpected cvs success\n'> <'     false\n'> <'   else\n'> <'     true\n'> <'   fi &&\n'> 
          <'   grep "GITCVS emulation disabled" cvs.log &&\n'> <'   test ! -d cvswork2'>
        )
      }
    )
    (C {<rm>} {<-fr>} {<cvswork2>})
    (C {<test_expect_success>} {(SQ <gitcvs.dbname>)} 
      {
        (SQ <'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n'> 
          <'   GIT_DIR="$SERVERDIR" git config gitcvs.dbname %Ggitcvs.%a.%m.sqlite &&\n'> <'   GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n'> 
          <'   test_cmp cvswork cvswork2 &&\n'> <'   test -f "$SERVERDIR/gitcvs.ext.master.sqlite" &&\n'> 
          <'   cmp "$SERVERDIR/gitcvs.master.sqlite" "$SERVERDIR/gitcvs.ext.master.sqlite"'>
        )
      }
    )
    (C {<rm>} {<-fr>} {<cvswork2>})
    (C {<test_expect_success>} {(SQ <gitcvs.ext.dbname>)} 
      {
        (SQ <'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n'> 
          <'   GIT_DIR="$SERVERDIR" git config gitcvs.ext.dbname %Ggitcvs1.%a.%m.sqlite &&\n'> <'   GIT_DIR="$SERVERDIR" git config gitcvs.dbname %Ggitcvs2.%a.%m.sqlite &&\n'> 
          <'   GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n'> <'   test_cmp cvswork cvswork2 &&\n'> <'   test -f "$SERVERDIR/gitcvs1.ext.master.sqlite" &&\n'> 
          <'   test ! -f "$SERVERDIR/gitcvs2.ext.master.sqlite" &&\n'> <'   cmp "$SERVERDIR/gitcvs.master.sqlite" "$SERVERDIR/gitcvs1.ext.master.sqlite"'>
        )
      }
    )
    (C {<rm>} {<-fr>} {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))})
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe]
      children: [
        (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
        (command.Simple
          words: [
            {<git>}
            {<clone>}
            {<-q>}
            {<--bare>}
            {(DQ ($ Id.VSub_DollarName '$WORKDIR') <'/.git'>)}
            {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))}
          ]
          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.Simple
          words: [{<git>} {<config>} {<--bool>} {<gitcvs.enabled>} {<true>}]
          more_env: [
            (env_pair
              name: GIT_DIR
              val: {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))}
              spids: [824]
            )
          ]
          do_fork: T
        )
        (command.Simple
          words: [
            {<git>}
            {<config>}
            {<gitcvs.logfile>}
            {(DQ ($ Id.VSub_DollarName '$SERVERDIR') <'/gitcvs.log'>)}
          ]
          more_env: [
            (env_pair
              name: GIT_DIR
              val: {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))}
              spids: [841]
            )
          ]
          do_fork: T
        )
        (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
      ]
    )
    (C {<test_expect_success>} {(SQ <'cvs update (create new file)'>)} 
      {
        (SQ <'echo testfile1 >testfile1 &&\n'> <'   git add testfile1 &&\n'> 
          <'   git commit -q -m "Add testfile1" &&\n'> <'   git push gitcvs.git >/dev/null &&\n'> <'   cd cvswork &&\n'> 
          <'   GIT_CONFIG="$git_config" cvs -Q update &&\n'> <'   test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.1/" &&\n'> 
          <'   test_cmp testfile1 ../testfile1'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs update (update existing file)'>)} 
      {
        (SQ <'echo line 2 >>testfile1 &&\n'> <'   git add testfile1 &&\n'> 
          <'   git commit -q -m "Append to testfile1" &&\n'> <'   git push gitcvs.git >/dev/null &&\n'> <'   cd cvswork &&\n'> 
          <'   GIT_CONFIG="$git_config" cvs -Q update &&\n'> <'   test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.2/" &&\n'> 
          <'   test_cmp testfile1 ../testfile1'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_failure>} {(DQ <'cvs update w/o -d doesn\'t create subdir (TODO)'>)} 
      {
        (SQ <'\n'> <'   mkdir test &&\n'> <'   echo >test/empty &&\n'> <'   git add test &&\n'> 
          <'   git commit -q -m "Single Subdirectory" &&\n'> <'   git push gitcvs.git >/dev/null &&\n'> <'   cd cvswork &&\n'> 
          <'   GIT_CONFIG="$git_config" cvs -Q update &&\n'> <'   test ! -d test\n'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs update (subdirectories)'>)} 
      {
        (SQ <'(for dir in A A/B A/B/C A/D E; do\n'> <'      mkdir $dir &&\n'> 
          <'      echo "test file in $dir" >"$dir/file_in_$(echo $dir|sed -e "s#/# #g")"  &&\n'> <'      git add $dir;\n'> <'   done) &&\n'> <'   git commit -q -m "deep sub directory structure" &&\n'> 
          <'   git push gitcvs.git >/dev/null &&\n'> <'   cd cvswork &&\n'> <'   GIT_CONFIG="$git_config" cvs -Q update -d &&\n'> 
          <'   (for dir in A A/B A/B/C A/D E; do\n'> <'      filename="file_in_$(echo $dir|sed -e "s#/# #g")" &&\n'> 
          <
'      if test "$(echo $(grep -v ^D $dir/CVS/Entries|cut -d/ -f2,3,5))" = "$filename/1.1/" &&\n'
          > <'\ttest_cmp "$dir/$filename" "../$dir/$filename"; then\n'> <'        :\n'> <'      else\n'> 
          <'        echo >failure\n'> <'      fi\n'> <'    done) &&\n'> <'   test ! -f failure'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs update (delete file)'>)} 
      {
        (SQ <'git rm testfile1 &&\n'> <'   git commit -q -m "Remove testfile1" &&\n'> 
          <'   git push gitcvs.git >/dev/null &&\n'> <'   cd cvswork &&\n'> <'   GIT_CONFIG="$git_config" cvs -Q update &&\n'> 
          <'   test -z "$(grep testfile1 CVS/Entries)" &&\n'> <'   test ! -f testfile1'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs update (re-add deleted file)'>)} 
      {
        (SQ <'echo readded testfile >testfile1 &&\n'> <'   git add testfile1 &&\n'> 
          <'   git commit -q -m "Re-Add testfile1" &&\n'> <'   git push gitcvs.git >/dev/null &&\n'> <'   cd cvswork &&\n'> 
          <'   GIT_CONFIG="$git_config" cvs -Q update &&\n'> <'   test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.4/" &&\n'> 
          <'   test_cmp testfile1 ../testfile1'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs update (merge)'>)} 
      {
        (SQ <'echo Line 0 >expected &&\n'> <'   for i in 1 2 3 4 5 6 7\n'> <'   do\n'> 
          <'     echo Line $i >>merge\n'> <'     echo Line $i >>expected\n'> <'   done &&\n'> <'   echo Line 8 >>expected &&\n'> 
          <'   git add merge &&\n'> <'   git commit -q -m "Merge test (pre-merge)" &&\n'> <'   git push gitcvs.git >/dev/null &&\n'> 
          <'   cd cvswork &&\n'> <'   GIT_CONFIG="$git_config" cvs -Q update &&\n'> 
          <'   test "$(echo $(grep merge CVS/Entries|cut -d/ -f2,3,5))" = "merge/1.1/" &&\n'> <'   test_cmp merge ../merge &&\n'> <'   ( echo Line 0; cat merge ) >merge.tmp &&\n'> 
          <'   mv merge.tmp merge &&\n'> <'   cd "$WORKDIR" &&\n'> <'   echo Line 8 >>merge &&\n'> <'   git add merge &&\n'> 
          <'   git commit -q -m "Merge test (merge)" &&\n'> <'   git push gitcvs.git >/dev/null &&\n'> <'   cd cvswork &&\n'> <'   sleep 1 && touch merge &&\n'> 
          <'   GIT_CONFIG="$git_config" cvs -Q update &&\n'> <'   test_cmp merge ../expected'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expected.C>})
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 1090
              stdin_parts: [
                <'<<<<<<< merge.mine\n'>
                <'Line 0\n'>
                <'=======\n'>
                <'LINE 0\n'>
                <'>>>>>>> merge.1.3\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.ForEach
      iter_name: i
      iter_words: [{<1>} {<2>} {<3>} {<4>} {<5>} {<6>} {<7>} {<8>}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.Simple
              words: [{<echo>} {<Line>} {($ Id.VSub_DollarName '$i')}]
              redirects: [(redir op:<Id.Redir_DGreat '>>'> loc:(redir_loc.Fd fd:1) arg:{<expected.C>})]
              do_fork: T
            )
          ]
        )
    )
    (C {<test_expect_success>} {(SQ <'cvs update (conflict merge)'>)} 
      {
        (SQ <'( echo LINE 0; cat merge ) >merge.tmp &&\n'> <'   mv merge.tmp merge &&\n'> 
          <'   git add merge &&\n'> <'   git commit -q -m "Merge test (conflict)" &&\n'> <'   git push gitcvs.git >/dev/null &&\n'> 
          <'   cd cvswork &&\n'> <'   GIT_CONFIG="$git_config" cvs -Q update &&\n'> <'   test_cmp merge ../expected.C'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs update (-C)'>)} 
      {
        (SQ <'cd cvswork &&\n'> <'   GIT_CONFIG="$git_config" cvs -Q update -C &&\n'> 
          <'   test_cmp merge ../merge'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs update (merge no-op)'>)} 
      {
        (SQ <'echo Line 9 >>merge &&\n'> <'    cp merge cvswork/merge &&\n'> <'    git add merge &&\n'> 
          <'    git commit -q -m "Merge test (no-op)" &&\n'> <'    git push gitcvs.git >/dev/null &&\n'> <'    cd cvswork &&\n'> <'    sleep 1 && touch merge &&\n'> 
          <'    GIT_CONFIG="$git_config" cvs -Q update &&\n'> <'    test_cmp merge ../merge'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs update (-p)'>)} 
      {
        (SQ <'\n'> <'    touch really-empty &&\n'> <'    echo Line 1 > no-lf &&\n'> 
          <'    printf "Line 2" >> no-lf &&\n'> <'    git add really-empty no-lf &&\n'> <'    git commit -q -m "Update -p test" &&\n'> 
          <'    git push gitcvs.git >/dev/null &&\n'> <'    cd cvswork &&\n'> <'    GIT_CONFIG="$git_config" cvs update &&\n'> <'    rm -f failures &&\n'> 
          <'    for i in merge no-lf empty really-empty; do\n'> <'        GIT_CONFIG="$git_config" cvs update -p "$i" >$i.out\n'> 
          <'\ttest_cmp $i.out ../$i >>failures 2>&1\n'> <'    done &&\n'> <'    test -z "$(cat failures)"\n'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs update (module list supports packed refs)'>)} 
      {
        (SQ <'\n'> <'    GIT_DIR="$SERVERDIR" git pack-refs --all &&\n'> 
          <'    GIT_CONFIG="$git_config" cvs -n up -d 2> out &&\n'> <'    grep "cvs update: New directory \\`master'>
        ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''>) (SQ <'" < out\n'>)
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs status'>)} 
      {
        (SQ <'\n'> <'    mkdir status.dir &&\n'> <'    echo Line > status.dir/status.file &&\n'> 
          <'    echo Line > status.file &&\n'> <'    git add status.dir status.file &&\n'> <'    git commit -q -m "Status test" &&\n'> 
          <'    git push gitcvs.git >/dev/null &&\n'> <'    cd cvswork &&\n'> <'    GIT_CONFIG="$git_config" cvs update &&\n'> 
          <'    GIT_CONFIG="$git_config" cvs status | grep "^File: status.file" >../out &&\n'> <'    test_line_count = 2 ../out\n'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs status (nonrecursive)'>)} 
      {
        (SQ <'\n'> <'    cd cvswork &&\n'> 
          <'    GIT_CONFIG="$git_config" cvs status -l | grep "^File: status.file" >../out &&\n'> <'    test_line_count = 1 ../out\n'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs status (no subdirs in header)'>)} 
      {
        (SQ <'\n'> <'    cd cvswork &&\n'> 
          <'    GIT_CONFIG="$git_config" cvs status | grep ^File: >../out &&\n'> <'    ! grep / <../out\n'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs co -c (shows module database)'>)} 
      {
        (SQ <'\n'> <'    GIT_CONFIG="$git_config" cvs co -c > out &&\n'> 
          <'    grep "^master[\t ][ \t]*master$" <out &&\n'> <'    ! grep -v "^master[\t ][ \t]*master$" <out\n'>
        )
      }
    )
    (command.Simple
      words: [{<sed>} {<-e>} {(SQ <'s/^x//'>)} {<-e>} {(SQ <'s/SP$/ /'>)}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(DQ ($ Id.VSub_DollarName '$WORKDIR') <'/expect'>)}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.MultiLine
              here_begin: {<EOF>}
              here_end_span_id: 1481
              stdin_parts: [
                <'x\n'>
                <'xRCS file: '>
                ($ Id.VSub_DollarName '$WORKDIR')
                <'/gitcvs.git/master/merge,v\n'>
                <'xWorking file: merge\n'>
                <'xhead: 1.4\n'>
                <'xbranch:\n'>
                <'xlocks: strict\n'>
                <'xaccess list:\n'>
                <'xsymbolic names:\n'>
                <'xkeyword substitution: kv\n'>
                <'xtotal revisions: 4;\tselected revisions: 4\n'>
                <'xdescription:\n'>
                <'x----------------------------\n'>
                <'xrevision 1.4\n'>
                <'xdate: __DATE__;  author: author;  state: Exp;  lines: +2 -3\n'>
                <'x\n'>
                <'xMerge test (no-op)\n'>
                <'xSP\n'>
                <'x----------------------------\n'>
                <'xrevision 1.3\n'>
                <'xdate: __DATE__;  author: author;  state: Exp;  lines: +2 -3\n'>
                <'x\n'>
                <'xMerge test (conflict)\n'>
                <'xSP\n'>
                <'x----------------------------\n'>
                <'xrevision 1.2\n'>
                <'xdate: __DATE__;  author: author;  state: Exp;  lines: +2 -3\n'>
                <'x\n'>
                <'xMerge test (merge)\n'>
                <'xSP\n'>
                <'x----------------------------\n'>
                <'xrevision 1.1\n'>
                <'xdate: __DATE__;  author: author;  state: Exp;  lines: +2 -3\n'>
                <'x\n'>
                <'xMerge test (pre-merge)\n'>
                <'xSP\n'>
                <'x=============================================================================\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:expectStat)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_QMark '$?'))}
          spids: [1482]
        )
      ]
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs log'>)} 
      {
        (SQ <'\n'> <'    cd cvswork &&\n'> <'    test x"$expectStat" = x"0" &&\n'> 
          <'    GIT_CONFIG="$git_config" cvs log merge >../out &&\n'> 
          <
'    sed -e "s%2[0-9][0-9][0-9]/[01][0-9]/[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9]%__DATE__%" ../out > ../actual &&\n'
          > <'    test_cmp ../expect ../actual\n'>
        )
      }
    )
    (C {<cd>} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {<test_expect_success>} {(SQ <'cvs annotate'>)} 
      {
        (SQ <'\n'> <'    cd cvswork &&\n'> 
          <'    GIT_CONFIG="$git_config" cvs annotate merge >../out &&\n'> <'    sed -e "s/ .*//" ../out >../actual &&\n'> 
          <'    for i in 3 1 1 1 1 1 1 1 2 4; do echo 1.$i; done >../expect &&\n'> <'    test_cmp ../expect ../actual\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)