(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: 
            {
              (SQ (Token id:Id.Lit_Chars val:'git-cvsserver access\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id:Id.Lit_Chars val:'tests read access to a git repository with the\n' span_id:17) 
                (Token
                  id: Id.Lit_Chars
                  val: 'cvs CLI client via git-cvsserver server'
                  span_id: 18
                )
              )
            }
          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: (Token id:Id.Op_Semi val:';' span_id:34)
            )
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (SQ 
                        (Token
                          id: Id.Lit_Chars
                          val: 'skipping git cvsserver tests, perl not available'
                          span_id: 41
                        )
                      )
                    }
                  spids: [39]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [27 36]
        )
      ]
    )
    (command.Simple
      words: [{(cvs)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:51)
          fd: -1
          arg_word: {(/dev/null)}
        )
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'2>&' span_id:54) fd:2 arg_word:{(1)})
      ]
    )
    (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 
                        (Token
                          id: Id.Lit_Chars
                          val: 'skipping git-cvsserver tests, cvs not found'
                          span_id: 72
                        )
                      )
                    }
                  spids: [70]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [57 67]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (command.Simple
          words: [
            {(perl)}
            {(-e)}
            {(SQ (Token id:Id.Lit_Chars val:'use DBI; use DBD::SQLite' span_id:85))}
          ]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:88)
              fd: -1
              arg_word: {(/dev/null)}
            )
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:91)
              fd: 2
              arg_word: {(1)}
            )
          ]
        )
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:skip_all)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (SQ 
                        (Token
                          id: Id.Lit_Chars
                          val: 'skipping git-cvsserver tests, Perl SQLite interface unavailable'
                          span_id: 101
                        )
                      )
                    }
                  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 (Token id:Id.Lit_Chars val:setup span_id:160))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:164) 
          (Token id:Id.Lit_Chars val:'  git config push.default matching &&\n' span_id:165) (Token id:Id.Lit_Chars val:'  echo >empty &&\n' span_id:166) 
          (Token id:Id.Lit_Chars val:'  git add empty &&\n' span_id:167) (Token id:Id.Lit_Chars val:'  git commit -q -m "First Commit" &&\n' span_id:168) 
          (Token id:Id.Lit_Chars val:'  mkdir secondroot &&\n' span_id:169) (Token id:Id.Lit_Chars val:'  ( cd secondroot &&\n' span_id:170) 
          (Token id:Id.Lit_Chars val:'  git init &&\n' span_id:171) (Token id:Id.Lit_Chars val:'  touch secondrootfile &&\n' span_id:172) 
          (Token id:Id.Lit_Chars val:'  git add secondrootfile &&\n' span_id:173) (Token id:Id.Lit_Chars val:'  git commit -m "second root") &&\n' span_id:174) 
          (Token id:Id.Lit_Chars val:'  git fetch secondroot master &&\n' span_id:175) (Token id:Id.Lit_Chars val:'  git merge --allow-unrelated-histories FETCH_HEAD &&\n' span_id:176) 
          (Token
            id: Id.Lit_Chars
            val: '  git clone -q --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&\n'
            span_id: 177
          ) 
          (Token
            id: Id.Lit_Chars
            val: '  GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&\n'
            span_id: 178
          ) 
          (Token
            id: Id.Lit_Chars
            val: '  GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log" &&\n'
            span_id: 179
          ) 
          (Token
            id: Id.Lit_Chars
            val: '  GIT_DIR="$SERVERDIR" git config gitcvs.authdb "$SERVERDIR/auth.db" &&\n'
            span_id: 180
          ) (Token id:Id.Lit_Chars val:'  echo cvsuser:cvGVEarMLnhlA > "$SERVERDIR/auth.db"\n' span_id:181)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'basic checkout' span_id:194))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_CONFIG="$git_config" cvs -Q co -d cvswork master &&\n'
            span_id: 200
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | head -n 1))" = "empty/1.1/" &&\n'
            span_id: 201
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'   test "$(echo $(grep -v ^D cvswork/CVS/Entries|cut -d/ -f2,3,5 | sed -ne \\$p))" = "secondrootfile/1.1/"'
            span_id: 202
          )
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:218)
          fd: -1
          arg_word: {(request-anonymous)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:221)
          fd: -1
          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')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:235)
          fd: -1
          arg_word: {(request-git)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:238)
          fd: -1
          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')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:252)
          fd: -1
          arg_word: {(login-anonymous)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:255)
          fd: -1
          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')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:269)
          fd: -1
          arg_word: {(login-git)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:272)
          fd: -1
          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')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:286)
          fd: -1
          arg_word: {(login-git-ok)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:289)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pserver authentication' span_id:304))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'cat request-anonymous | git-cvsserver pserver >log 2>&1 &&\n'
            span_id: 310
          ) (Token id:Id.Lit_Chars val:'   sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:311)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pserver authentication failure (non-anonymous user)'
            span_id: 318
          )
        )
      } 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'if cat request-git | git-cvsserver pserver >log 2>&1\n'
            span_id: 324
          ) (Token id:Id.Lit_Chars val:'   then\n' span_id:325) 
          (Token id:Id.Lit_Chars val:'       false\n' span_id:326) (Token id:Id.Lit_Chars val:'   else\n' span_id:327) 
          (Token id:Id.Lit_Chars val:'       true\n' span_id:328) (Token id:Id.Lit_Chars val:'   fi &&\n' span_id:329) 
          (Token
            id: Id.Lit_Chars
            val: '   sed -ne \\$p log | grep "^I HATE YOU\\$"'
            span_id: 330
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pserver authentication success (non-anonymous user with password)'
            span_id: 337
          )
        )
      } 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'cat login-git-ok | git-cvsserver pserver >log 2>&1 &&\n'
            span_id: 343
          ) (Token id:Id.Lit_Chars val:'   sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:344)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pserver authentication (login)' span_id:351))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'cat login-anonymous | git-cvsserver pserver >log 2>&1 &&\n'
            span_id: 357
          ) (Token id:Id.Lit_Chars val:'   sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:358)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pserver authentication failure (login/non-anonymous user)'
            span_id: 365
          )
        )
      } 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'if cat login-git | git-cvsserver pserver >log 2>&1\n'
            span_id: 371
          ) (Token id:Id.Lit_Chars val:'   then\n' span_id:372) 
          (Token id:Id.Lit_Chars val:'       false\n' span_id:373) (Token id:Id.Lit_Chars val:'   else\n' span_id:374) 
          (Token id:Id.Lit_Chars val:'       true\n' span_id:375) (Token id:Id.Lit_Chars val:'   fi &&\n' span_id:376) 
          (Token
            id: Id.Lit_Chars
            val: '   sed -ne \\$p log | grep "^I HATE YOU\\$"'
            span_id: 377
          )
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:388)
          fd: -1
          arg_word: {(request-relative)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:391)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 400
          stdin_parts: [
            ('BEGIN AUTH REQUEST\n')
            ('gitcvs.git\n')
            ('anonymous\n')
            ('\n')
            ('END AUTH REQUEST\n')
          ]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:404)
          fd: -1
          arg_word: {(request-conflict)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:407)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (relative pathname)' span_id:425))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'if cat request-relative | git-cvsserver pserver >log 2>&1\n'
            span_id: 431
          ) (Token id:Id.Lit_Chars val:'   then\n' span_id:432) 
          (Token id:Id.Lit_Chars val:'       echo unexpected success\n' span_id:433) (Token id:Id.Lit_Chars val:'       false\n' span_id:434) 
          (Token id:Id.Lit_Chars val:'   else\n' span_id:435) (Token id:Id.Lit_Chars val:'       true\n' span_id:436) 
          (Token id:Id.Lit_Chars val:'   fi &&\n' span_id:437) 
          (Token
            id: Id.Lit_Chars
            val: '   tail log | grep "^error 1 Root must be an absolute pathname$"'
            span_id: 438
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (conflicting roots)' span_id:445))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'cat request-conflict | git-cvsserver pserver >log 2>&1 &&\n'
            span_id: 451
          ) (Token id:Id.Lit_Chars val:'   tail log | grep "^error 1 Conflicting roots specified$"' span_id:452)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root (strict paths)' span_id:459))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'cat request-anonymous | git-cvsserver --strict-paths pserver "$SERVERDIR" >log 2>&1 &&\n'
            span_id: 465
          ) (Token id:Id.Lit_Chars val:'   sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:466)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (strict-paths)' span_id:473))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:477) 
          (Token id:Id.Lit_Chars val:'    ! cat request-anonymous |\n' span_id:478) 
          (Token
            id: Id.Lit_Chars
            val: '    git-cvsserver --strict-paths pserver "$WORKDIR" >log 2>&1\n'
            span_id: 479
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'req_Root (w/o strict-paths)' span_id:486))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'cat request-anonymous | git-cvsserver pserver "$WORKDIR/" >log 2>&1 &&\n'
            span_id: 492
          ) (Token id:Id.Lit_Chars val:'   sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:493)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (w/o strict-paths)' span_id:500))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:504) 
          (Token id:Id.Lit_Chars val:'    ! cat request-anonymous |\n' span_id:505) (Token id:Id.Lit_Chars val:'    git-cvsserver pserver "$WORKDIR/gitcvs" >log 2>&1\n' span_id:506)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:512)
          fd: -1
          arg_word: {(request-base)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:515)
          fd: -1
          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')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root (base-path)' span_id:530))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'cat request-base | git-cvsserver --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&\n'
            span_id: 536
          ) (Token id:Id.Lit_Chars val:'   sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:537)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (base-path)' span_id:544))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:548) 
          (Token id:Id.Lit_Chars val:'    ! cat request-anonymous |\n' span_id:549) 
          (Token
            id: Id.Lit_Chars
            val: 
'    git-cvsserver --strict-paths --base-path "$WORKDIR" pserver "$SERVERDIR" >log 2>&1\n'
            span_id: 550
          )
        )
      }
    )
    (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]
            )
          ]
        )
        (command.ControlFlow
          token: (Token id:Id.ControlFlow_Exit val:exit span_id:571)
          arg_word: {(1)}
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'req_Root (export-all)' span_id:579))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'cat request-anonymous | git-cvsserver --export-all pserver "$WORKDIR" >log 2>&1 &&\n'
            span_id: 585
          ) (Token id:Id.Lit_Chars val:'   sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:586)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'req_Root failure (export-all w/o whitelist)' span_id:593))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: '! (cat request-anonymous | git-cvsserver --export-all pserver >log 2>&1 || false)'
            span_id: 599
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'req_Root (everything together)' span_id:606))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'cat request-base | git-cvsserver --export-all --strict-paths --base-path "$WORKDIR/" pserver "$SERVERDIR" >log 2>&1 &&\n'
            span_id: 612
          ) (Token id:Id.Lit_Chars val:'   sed -ne \\$p log | grep "^I LOVE YOU\\$"' span_id:613)
        )
      }
    )
    (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]
            )
          ]
        )
        (command.ControlFlow
          token: (Token id:Id.ControlFlow_Exit val:exit span_id:634)
          arg_word: {(1)}
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'gitcvs.enabled = false' span_id:652))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false &&\n'
            span_id: 658
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   if GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1\n'
            span_id: 659
          ) (Token id:Id.Lit_Chars val:'   then\n' span_id:660) 
          (Token id:Id.Lit_Chars val:'     echo unexpected cvs success\n' span_id:661) (Token id:Id.Lit_Chars val:'     false\n' span_id:662) 
          (Token id:Id.Lit_Chars val:'   else\n' span_id:663) (Token id:Id.Lit_Chars val:'     true\n' span_id:664) 
          (Token id:Id.Lit_Chars val:'   fi &&\n' span_id:665) (Token id:Id.Lit_Chars val:'   grep "GITCVS emulation disabled" cvs.log &&\n' span_id:666) 
          (Token id:Id.Lit_Chars val:'   test ! -d cvswork2' span_id:667)
        )
      }
    )
    (C {(rm)} {(-fr)} {(cvswork2)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'gitcvs.ext.enabled = true' span_id:680))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n'
            span_id: 686
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled false &&\n'
            span_id: 687
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n'
            span_id: 688
          ) (Token id:Id.Lit_Chars val:'   test_cmp cvswork cvswork2' span_id:689)
        )
      }
    )
    (C {(rm)} {(-fr)} {(cvswork2)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'gitcvs.ext.enabled = false' span_id:702))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled false &&\n'
            span_id: 708
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&\n'
            span_id: 709
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   if GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1\n'
            span_id: 710
          ) (Token id:Id.Lit_Chars val:'   then\n' span_id:711) 
          (Token id:Id.Lit_Chars val:'     echo unexpected cvs success\n' span_id:712) (Token id:Id.Lit_Chars val:'     false\n' span_id:713) 
          (Token id:Id.Lit_Chars val:'   else\n' span_id:714) (Token id:Id.Lit_Chars val:'     true\n' span_id:715) 
          (Token id:Id.Lit_Chars val:'   fi &&\n' span_id:716) (Token id:Id.Lit_Chars val:'   grep "GITCVS emulation disabled" cvs.log &&\n' span_id:717) 
          (Token id:Id.Lit_Chars val:'   test ! -d cvswork2' span_id:718)
        )
      }
    )
    (C {(rm)} {(-fr)} {(cvswork2)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:gitcvs.dbname span_id:731))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n'
            span_id: 737
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_DIR="$SERVERDIR" git config gitcvs.dbname %Ggitcvs.%a.%m.sqlite &&\n'
            span_id: 738
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n'
            span_id: 739
          ) (Token id:Id.Lit_Chars val:'   test_cmp cvswork cvswork2 &&\n' span_id:740) 
          (Token
            id: Id.Lit_Chars
            val: '   test -f "$SERVERDIR/gitcvs.ext.master.sqlite" &&\n'
            span_id: 741
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   cmp "$SERVERDIR/gitcvs.master.sqlite" "$SERVERDIR/gitcvs.ext.master.sqlite"'
            span_id: 742
          )
        )
      }
    )
    (C {(rm)} {(-fr)} {(cvswork2)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:gitcvs.ext.dbname span_id:755))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'GIT_DIR="$SERVERDIR" git config --bool gitcvs.ext.enabled true &&\n'
            span_id: 761
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_DIR="$SERVERDIR" git config gitcvs.ext.dbname %Ggitcvs1.%a.%m.sqlite &&\n'
            span_id: 762
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_DIR="$SERVERDIR" git config gitcvs.dbname %Ggitcvs2.%a.%m.sqlite &&\n'
            span_id: 763
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&\n'
            span_id: 764
          ) (Token id:Id.Lit_Chars val:'   test_cmp cvswork cvswork2 &&\n' span_id:765) 
          (Token
            id: Id.Lit_Chars
            val: '   test -f "$SERVERDIR/gitcvs1.ext.master.sqlite" &&\n'
            span_id: 766
          ) (Token id:Id.Lit_Chars val:'   test ! -f "$SERVERDIR/gitcvs2.ext.master.sqlite" &&\n' span_id:767) 
          (Token
            id: Id.Lit_Chars
            val: '   cmp "$SERVERDIR/gitcvs.master.sqlite" "$SERVERDIR/gitcvs1.ext.master.sqlite"'
            span_id: 768
          )
        )
      }
    )
    (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.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:816)
              fd: -1
              arg_word: {(/dev/null)}
            )
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:819)
              fd: 2
              arg_word: {(1)}
            )
          ]
        )
        (command.Simple
          words: [{(git)} {(config)} {(--bool)} {(gitcvs.enabled)} {(true)}]
          more_env: [
            (env_pair
              name: GIT_DIR
              val: {(DQ ($ Id.VSub_DollarName '$SERVERDIR'))}
              spids: [824]
            )
          ]
        )
        (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]
            )
          ]
        )
        (command.ControlFlow
          token: (Token id:Id.ControlFlow_Exit val:exit span_id:859)
          arg_word: {(1)}
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs update (create new file)' span_id:867))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'echo testfile1 >testfile1 &&\n' span_id:873) 
          (Token id:Id.Lit_Chars val:'   git add testfile1 &&\n' span_id:874) (Token id:Id.Lit_Chars val:'   git commit -q -m "Add testfile1" &&\n' span_id:875) 
          (Token id:Id.Lit_Chars val:'   git push gitcvs.git >/dev/null &&\n' span_id:876) (Token id:Id.Lit_Chars val:'   cd cvswork &&\n' span_id:877) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_CONFIG="$git_config" cvs -Q update &&\n'
            span_id: 878
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'   test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.1/" &&\n'
            span_id: 879
          ) (Token id:Id.Lit_Chars val:'   test_cmp testfile1 ../testfile1' span_id:880)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs update (update existing file)' span_id:893))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'echo line 2 >>testfile1 &&\n' span_id:899) 
          (Token id:Id.Lit_Chars val:'   git add testfile1 &&\n' span_id:900) (Token id:Id.Lit_Chars val:'   git commit -q -m "Append to testfile1" &&\n' span_id:901) 
          (Token id:Id.Lit_Chars val:'   git push gitcvs.git >/dev/null &&\n' span_id:902) (Token id:Id.Lit_Chars val:'   cd cvswork &&\n' span_id:903) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_CONFIG="$git_config" cvs -Q update &&\n'
            span_id: 904
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'   test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.2/" &&\n'
            span_id: 905
          ) (Token id:Id.Lit_Chars val:'   test_cmp testfile1 ../testfile1' span_id:906)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_failure)} {(DQ ("cvs update w/o -d doesn't create subdir (TODO)"))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:926) 
          (Token id:Id.Lit_Chars val:'   mkdir test &&\n' span_id:927) (Token id:Id.Lit_Chars val:'   echo >test/empty &&\n' span_id:928) 
          (Token id:Id.Lit_Chars val:'   git add test &&\n' span_id:929) (Token id:Id.Lit_Chars val:'   git commit -q -m "Single Subdirectory" &&\n' span_id:930) 
          (Token id:Id.Lit_Chars val:'   git push gitcvs.git >/dev/null &&\n' span_id:931) (Token id:Id.Lit_Chars val:'   cd cvswork &&\n' span_id:932) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_CONFIG="$git_config" cvs -Q update &&\n'
            span_id: 933
          ) (Token id:Id.Lit_Chars val:'   test ! -d test\n' span_id:934)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs update (subdirectories)' span_id:947))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'(for dir in A A/B A/B/C A/D E; do\n' span_id:953) 
          (Token id:Id.Lit_Chars val:'      mkdir $dir &&\n' span_id:954) 
          (Token
            id: Id.Lit_Chars
            val: 
'      echo "test file in $dir" >"$dir/file_in_$(echo $dir|sed -e "s#/# #g")"  &&\n'
            span_id: 955
          ) (Token id:Id.Lit_Chars val:'      git add $dir;\n' span_id:956) 
          (Token id:Id.Lit_Chars val:'   done) &&\n' span_id:957) (Token id:Id.Lit_Chars val:'   git commit -q -m "deep sub directory structure" &&\n' span_id:958) 
          (Token id:Id.Lit_Chars val:'   git push gitcvs.git >/dev/null &&\n' span_id:959) (Token id:Id.Lit_Chars val:'   cd cvswork &&\n' span_id:960) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_CONFIG="$git_config" cvs -Q update -d &&\n'
            span_id: 961
          ) (Token id:Id.Lit_Chars val:'   (for dir in A A/B A/B/C A/D E; do\n' span_id:962) 
          (Token
            id: Id.Lit_Chars
            val: '      filename="file_in_$(echo $dir|sed -e "s#/# #g")" &&\n'
            span_id: 963
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'      if test "$(echo $(grep -v ^D $dir/CVS/Entries|cut -d/ -f2,3,5))" = "$filename/1.1/" &&\n'
            span_id: 964
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp "$dir/$filename" "../$dir/$filename"; then\n' span_id:965) 
          (Token id:Id.Lit_Chars val:'        :\n' span_id:966) (Token id:Id.Lit_Chars val:'      else\n' span_id:967) 
          (Token id:Id.Lit_Chars val:'        echo >failure\n' span_id:968) (Token id:Id.Lit_Chars val:'      fi\n' span_id:969) 
          (Token id:Id.Lit_Chars val:'    done) &&\n' span_id:970) (Token id:Id.Lit_Chars val:'   test ! -f failure' span_id:971)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (delete file)' span_id:984))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'git rm testfile1 &&\n' span_id:990) 
          (Token
            id: Id.Lit_Chars
            val: '   git commit -q -m "Remove testfile1" &&\n'
            span_id: 991
          ) (Token id:Id.Lit_Chars val:'   git push gitcvs.git >/dev/null &&\n' span_id:992) 
          (Token id:Id.Lit_Chars val:'   cd cvswork &&\n' span_id:993) (Token id:Id.Lit_Chars val:'   GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id:994) 
          (Token
            id: Id.Lit_Chars
            val: '   test -z "$(grep testfile1 CVS/Entries)" &&\n'
            span_id: 995
          ) (Token id:Id.Lit_Chars val:'   test ! -f testfile1' span_id:996)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs update (re-add deleted file)' span_id:1009))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'echo readded testfile >testfile1 &&\n' span_id:1015) 
          (Token id:Id.Lit_Chars val:'   git add testfile1 &&\n' span_id:1016) (Token id:Id.Lit_Chars val:'   git commit -q -m "Re-Add testfile1" &&\n' span_id:1017) 
          (Token id:Id.Lit_Chars val:'   git push gitcvs.git >/dev/null &&\n' span_id:1018) (Token id:Id.Lit_Chars val:'   cd cvswork &&\n' span_id:1019) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_CONFIG="$git_config" cvs -Q update &&\n'
            span_id: 1020
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'   test "$(echo $(grep testfile1 CVS/Entries|cut -d/ -f2,3,5))" = "testfile1/1.4/" &&\n'
            span_id: 1021
          ) (Token id:Id.Lit_Chars val:'   test_cmp testfile1 ../testfile1' span_id:1022)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (merge)' span_id:1035))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'echo Line 0 >expected &&\n' span_id:1041) 
          (Token id:Id.Lit_Chars val:'   for i in 1 2 3 4 5 6 7\n' span_id:1042) (Token id:Id.Lit_Chars val:'   do\n' span_id:1043) 
          (Token id:Id.Lit_Chars val:'     echo Line $i >>merge\n' span_id:1044) (Token id:Id.Lit_Chars val:'     echo Line $i >>expected\n' span_id:1045) 
          (Token id:Id.Lit_Chars val:'   done &&\n' span_id:1046) (Token id:Id.Lit_Chars val:'   echo Line 8 >>expected &&\n' span_id:1047) 
          (Token id:Id.Lit_Chars val:'   git add merge &&\n' span_id:1048) (Token id:Id.Lit_Chars val:'   git commit -q -m "Merge test (pre-merge)" &&\n' span_id:1049) 
          (Token id:Id.Lit_Chars val:'   git push gitcvs.git >/dev/null &&\n' span_id:1050) (Token id:Id.Lit_Chars val:'   cd cvswork &&\n' span_id:1051) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_CONFIG="$git_config" cvs -Q update &&\n'
            span_id: 1052
          ) 
          (Token
            id: Id.Lit_Chars
            val: '   test "$(echo $(grep merge CVS/Entries|cut -d/ -f2,3,5))" = "merge/1.1/" &&\n'
            span_id: 1053
          ) (Token id:Id.Lit_Chars val:'   test_cmp merge ../merge &&\n' span_id:1054) 
          (Token
            id: Id.Lit_Chars
            val: '   ( echo Line 0; cat merge ) >merge.tmp &&\n'
            span_id: 1055
          ) (Token id:Id.Lit_Chars val:'   mv merge.tmp merge &&\n' span_id:1056) 
          (Token id:Id.Lit_Chars val:'   cd "$WORKDIR" &&\n' span_id:1057) (Token id:Id.Lit_Chars val:'   echo Line 8 >>merge &&\n' span_id:1058) 
          (Token id:Id.Lit_Chars val:'   git add merge &&\n' span_id:1059) (Token id:Id.Lit_Chars val:'   git commit -q -m "Merge test (merge)" &&\n' span_id:1060) 
          (Token id:Id.Lit_Chars val:'   git push gitcvs.git >/dev/null &&\n' span_id:1061) (Token id:Id.Lit_Chars val:'   cd cvswork &&\n' span_id:1062) 
          (Token id:Id.Lit_Chars val:'   sleep 1 && touch merge &&\n' span_id:1063) (Token id:Id.Lit_Chars val:'   GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id:1064) 
          (Token id:Id.Lit_Chars val:'   test_cmp merge ../expected' span_id:1065)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1078)
          fd: -1
          arg_word: {(expected.C)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1081)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 1090
          stdin_parts: [
            ('<<<<<<< merge.mine\n')
            ('Line 0\n')
            ('=======\n')
            ('LINE 0\n')
            ('>>>>>>> merge.1.3\n')
          ]
        )
      ]
    )
    (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.Redir
                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:1123)
                  fd: -1
                  arg_word: {(expected.C)}
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs update (conflict merge)' span_id:1132))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'( echo LINE 0; cat merge ) >merge.tmp &&\n' span_id:1138) 
          (Token id:Id.Lit_Chars val:'   mv merge.tmp merge &&\n' span_id:1139) (Token id:Id.Lit_Chars val:'   git add merge &&\n' span_id:1140) 
          (Token
            id: Id.Lit_Chars
            val: '   git commit -q -m "Merge test (conflict)" &&\n'
            span_id: 1141
          ) (Token id:Id.Lit_Chars val:'   git push gitcvs.git >/dev/null &&\n' span_id:1142) 
          (Token id:Id.Lit_Chars val:'   cd cvswork &&\n' span_id:1143) (Token id:Id.Lit_Chars val:'   GIT_CONFIG="$git_config" cvs -Q update &&\n' span_id:1144) 
          (Token id:Id.Lit_Chars val:'   test_cmp merge ../expected.C' span_id:1145)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (-C)' span_id:1158))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'cd cvswork &&\n' span_id:1164) 
          (Token
            id: Id.Lit_Chars
            val: '   GIT_CONFIG="$git_config" cvs -Q update -C &&\n'
            span_id: 1165
          ) (Token id:Id.Lit_Chars val:'   test_cmp merge ../merge' span_id:1166)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs update (merge no-op)' span_id:1179))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'echo Line 9 >>merge &&\n' span_id:1185) 
          (Token id:Id.Lit_Chars val:'    cp merge cvswork/merge &&\n' span_id:1186) (Token id:Id.Lit_Chars val:'    git add merge &&\n' span_id:1187) 
          (Token
            id: Id.Lit_Chars
            val: '    git commit -q -m "Merge test (no-op)" &&\n'
            span_id: 1188
          ) (Token id:Id.Lit_Chars val:'    git push gitcvs.git >/dev/null &&\n' span_id:1189) 
          (Token id:Id.Lit_Chars val:'    cd cvswork &&\n' span_id:1190) (Token id:Id.Lit_Chars val:'    sleep 1 && touch merge &&\n' span_id:1191) 
          (Token
            id: Id.Lit_Chars
            val: '    GIT_CONFIG="$git_config" cvs -Q update &&\n'
            span_id: 1192
          ) (Token id:Id.Lit_Chars val:'    test_cmp merge ../merge' span_id:1193)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs update (-p)' span_id:1206))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1210) 
          (Token id:Id.Lit_Chars val:'    touch really-empty &&\n' span_id:1211) (Token id:Id.Lit_Chars val:'    echo Line 1 > no-lf &&\n' span_id:1212) 
          (Token id:Id.Lit_Chars val:'    printf "Line 2" >> no-lf &&\n' span_id:1213) (Token id:Id.Lit_Chars val:'    git add really-empty no-lf &&\n' span_id:1214) 
          (Token
            id: Id.Lit_Chars
            val: '    git commit -q -m "Update -p test" &&\n'
            span_id: 1215
          ) (Token id:Id.Lit_Chars val:'    git push gitcvs.git >/dev/null &&\n' span_id:1216) 
          (Token id:Id.Lit_Chars val:'    cd cvswork &&\n' span_id:1217) (Token id:Id.Lit_Chars val:'    GIT_CONFIG="$git_config" cvs update &&\n' span_id:1218) 
          (Token id:Id.Lit_Chars val:'    rm -f failures &&\n' span_id:1219) (Token id:Id.Lit_Chars val:'    for i in merge no-lf empty really-empty; do\n' span_id:1220) 
          (Token
            id: Id.Lit_Chars
            val: '        GIT_CONFIG="$git_config" cvs update -p "$i" >$i.out\n'
            span_id: 1221
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp $i.out ../$i >>failures 2>&1\n' span_id:1222) 
          (Token id:Id.Lit_Chars val:'    done &&\n' span_id:1223) (Token id:Id.Lit_Chars val:'    test -z "$(cat failures)"\n' span_id:1224)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs update (module list supports packed refs)' span_id:1237))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1241) 
          (Token
            id: Id.Lit_Chars
            val: '    GIT_DIR="$SERVERDIR" git pack-refs --all &&\n'
            span_id: 1242
          ) (Token id:Id.Lit_Chars val:'    GIT_CONFIG="$git_config" cvs -n up -d 2> out &&\n' span_id:1243) 
          (Token
            id: Id.Lit_Chars
            val: '    grep "cvs update: New directory \\`master'
            span_id: 1244
          )
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:1246)) 
        (SQ (Token id:Id.Lit_Chars val:'" < out\n' span_id:1248))
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs status' span_id:1271))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1275) 
          (Token id:Id.Lit_Chars val:'    mkdir status.dir &&\n' span_id:1276) (Token id:Id.Lit_Chars val:'    echo Line > status.dir/status.file &&\n' span_id:1277) 
          (Token id:Id.Lit_Chars val:'    echo Line > status.file &&\n' span_id:1278) (Token id:Id.Lit_Chars val:'    git add status.dir status.file &&\n' span_id:1279) 
          (Token
            id: Id.Lit_Chars
            val: '    git commit -q -m "Status test" &&\n'
            span_id: 1280
          ) (Token id:Id.Lit_Chars val:'    git push gitcvs.git >/dev/null &&\n' span_id:1281) 
          (Token id:Id.Lit_Chars val:'    cd cvswork &&\n' span_id:1282) (Token id:Id.Lit_Chars val:'    GIT_CONFIG="$git_config" cvs update &&\n' span_id:1283) 
          (Token
            id: Id.Lit_Chars
            val: '    GIT_CONFIG="$git_config" cvs status | grep "^File: status.file" >../out &&\n'
            span_id: 1284
          ) (Token id:Id.Lit_Chars val:'    test_line_count = 2 ../out\n' span_id:1285)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs status (nonrecursive)' span_id:1298))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1302) 
          (Token id:Id.Lit_Chars val:'    cd cvswork &&\n' span_id:1303) 
          (Token
            id: Id.Lit_Chars
            val: 
'    GIT_CONFIG="$git_config" cvs status -l | grep "^File: status.file" >../out &&\n'
            span_id: 1304
          ) (Token id:Id.Lit_Chars val:'    test_line_count = 1 ../out\n' span_id:1305)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs status (no subdirs in header)' span_id:1318))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1322) 
          (Token id:Id.Lit_Chars val:'    cd cvswork &&\n' span_id:1323) 
          (Token
            id: Id.Lit_Chars
            val: '    GIT_CONFIG="$git_config" cvs status | grep ^File: >../out &&\n'
            span_id: 1324
          ) (Token id:Id.Lit_Chars val:'    ! grep / <../out\n' span_id:1325)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs co -c (shows module database)' span_id:1348))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1352) 
          (Token
            id: Id.Lit_Chars
            val: '    GIT_CONFIG="$git_config" cvs co -c > out &&\n'
            span_id: 1353
          ) (Token id:Id.Lit_Chars val:'    grep "^master[\t ][ \t]*master$" <out &&\n' span_id:1354) 
          (Token
            id: Id.Lit_Chars
            val: '    ! grep -v "^master[\t ][ \t]*master$" <out\n'
            span_id: 1355
          )
        )
      }
    )
    (command.Simple
      words: [
        {(sed)}
        {(-e)}
        {(SQ (Token id:Id.Lit_Chars val:'s/^x//' span_id:1423))}
        {(-e)}
        {(SQ (Token id:Id.Lit_Chars val:'s/SP$/ /' span_id:1429))}
      ]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:1432)
          fd: -1
          arg_word: {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/expect))}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:1439)
          fd: -1
          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')
          ]
        )
      ]
    )
    (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 (Token id:Id.Lit_Chars val:'cvs log' span_id:1497))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1501) 
          (Token id:Id.Lit_Chars val:'    cd cvswork &&\n' span_id:1502) (Token id:Id.Lit_Chars val:'    test x"$expectStat" = x"0" &&\n' span_id:1503) 
          (Token
            id: Id.Lit_Chars
            val: '    GIT_CONFIG="$git_config" cvs log merge >../out &&\n'
            span_id: 1504
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'    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'
            span_id: 1505
          ) (Token id:Id.Lit_Chars val:'    test_cmp ../expect ../actual\n' span_id:1506)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$WORKDIR'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs annotate' span_id:1529))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1533) 
          (Token id:Id.Lit_Chars val:'    cd cvswork &&\n' span_id:1534) 
          (Token
            id: Id.Lit_Chars
            val: '    GIT_CONFIG="$git_config" cvs annotate merge >../out &&\n'
            span_id: 1535
          ) (Token id:Id.Lit_Chars val:'    sed -e "s/ .*//" ../out >../actual &&\n' span_id:1536) 
          (Token
            id: Id.Lit_Chars
            val: '    for i in 3 1 1 1 1 1 1 1 2 4; do echo 1.$i; done >../expect &&\n'
            span_id: 1537
          ) (Token id:Id.Lit_Chars val:'    test_cmp ../expect ../actual\n' span_id:1538)
        )
      }
    )
    (C {(test_done)})
  ]
)