(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 and git refspecs\n' span_id:6) 
                (Token id:Id.Lit_Chars val:'\n' span_id:7) 
                (Token
                  id: Id.Lit_Chars
                  val: 'tests ability for git-cvsserver to switch between and compare\n'
                  span_id: 8
                ) (Token id:Id.Lit_Chars val:'tags, branches and other git refspecs' span_id:9)
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShFunction
      name: check_start_tree
      body: 
        (command.BraceGroup
          children: [
            (C {(rm)} {(-f)} {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/list.expected))})
            (command.Simple
              words: [{(echo)} {(DQ ('start ') ($ Id.VSub_Number '$1'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:46)
                  fd: -1
                  arg_word: {(DQ (${ Id.VSub_Name WORKDIR) (/check.log))}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_file
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:sandbox)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [64]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:file)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$2'))}
                  spids: [70]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ver)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$3'))}
                  spids: [76]
                )
              ]
            )
            (command.Simple
              words: [{(git)} {(show)} {(DQ (${ Id.VSub_Name ver) (':') (${ Id.VSub_Name file))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:101)
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/check.got))}
                )
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'2>' span_id:107)
                  fd: 2
                  arg_word: {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/check.stderr))}
                )
              ]
              more_env: [(env_pair name:GIT_DIR val:{($ Id.VSub_DollarName '$SERVERDIR')} spids:[82])]
            )
            (C {(test_cmp)} {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/check.got))} 
              {(DQ ($ Id.VSub_DollarName '$sandbox') (/) ($ Id.VSub_DollarName '$file'))}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:stat)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_QMark '$?')}
                  spids: [128]
                )
              ]
            )
            (command.Simple
              words: [
                {(echo)}
                {
                  (DQ ('check_file ') ($ Id.VSub_DollarName '$sandbox') (' ') 
                    ($ Id.VSub_DollarName '$file') (' ') ($ Id.VSub_DollarName '$ver') (' : ') ($ Id.VSub_DollarName '$stat')
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:145)
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/check.log))}
                )
              ]
            )
            (command.Simple
              words: [{(echo)} {(DQ ($ Id.VSub_DollarName '$file'))}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:158)
                  fd: -1
                  arg_word: {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/list.expected))}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:165)
              arg_word: {($ Id.VSub_DollarName '$stat')}
            )
          ]
        )
    )
    (command.ShFunction
      name: check_end_tree
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:sandbox)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1'))}
                      spids: [179]
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(find)}
                    {(DQ ($ Id.VSub_DollarName '$sandbox'))}
                    {(-name)}
                    {(CVS)}
                    {(-prune)}
                    {(-o)}
                    {(-type)}
                    {(f)}
                    {(-print)}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:207)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/list.actual))}
                    )
                  ]
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:218)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/list.expected))}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:224)
                      fd: -1
                      arg_word: {(expected)}
                    )
                  ]
                )
                (command.Pipeline
                  children: [
                    (command.Simple
                      words: [{(sort)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Less val:'<' span_id:232)
                          fd: -1
                          arg_word: {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/list.actual))}
                        )
                      ]
                    )
                    (command.Simple
                      words: [{(sed)} {(-e)} {(DQ ('s%cvswork/%%'))}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:248)
                          fd: -1
                          arg_word: {(actual)}
                        )
                      ]
                    )
                  ]
                  negated: F
                )
                (C {(test_cmp)} {(expected)} {(actual)})
                (C {(rm)} {(expected)} {(actual)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_end_full_tree
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:sandbox)
                      op: assign_op.Equal
                      rhs: {(DQ ($ Id.VSub_Number '$1'))}
                      spids: [279]
                    )
                  ]
                )
                (command.Simple
                  words: [{(sort)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:289)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_DollarName '$WORKDIR') (/list.expected))}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:295)
                      fd: -1
                      arg_word: {(expected)}
                    )
                  ]
                )
                (command.Pipeline
                  children: [
                    (C {(find)} {(DQ ($ Id.VSub_DollarName '$sandbox'))} {(-name)} {(CVS)} {(-prune)} 
                      {(-o)} {(-type)} {(f)} {(-print)}
                    )
                    (C {(sed)} {(-e)} {(DQ ('s%') ($ Id.VSub_DollarName '$sandbox') ('/%%'))})
                    (command.Simple
                      words: [{(sort)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:338)
                          fd: -1
                          arg_word: {(act1)}
                        )
                      ]
                    )
                  ]
                  negated: F
                )
                (C {(test_cmp)} {(expected)} {(act1)})
                (command.Pipeline
                  children: [
                    (C {(git)} {(ls-tree)} {(--name-only)} {(-r)} {(DQ ($ Id.VSub_Number '$2'))})
                    (command.Simple
                      words: [{(sort)}]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:369)
                          fd: -1
                          arg_word: {(act2)}
                        )
                      ]
                    )
                  ]
                  negated: F
                )
                (C {(test_cmp)} {(expected)} {(act2)})
                (C {(rm)} {(expected)} {(act1)} {(act2)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_diff
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:diffFile)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [406]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:vOld)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$2'))}
                  spids: [412]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:vNew)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$3'))}
                  spids: [418]
                )
              ]
            )
            (C {(rm)} {(-rf)} {(diffSandbox)})
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (C {(git)} {(clone)} {(-q)} {(-n)} {(.)} {(diffSandbox)})
                (command.Subshell
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
                          children: [
                            (C {(cd)} {(diffSandbox)})
                            (C {(git)} {(checkout)} {(DQ ($ Id.VSub_DollarName '$vOld'))})
                            (command.Simple
                              words: [{(git)} {(apply)} {(-p0)} {(--index)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Less val:'<' span_id:475)
                                  fd: -1
                                  arg_word: {(DQ (../) ($ Id.VSub_DollarName '$diffFile'))}
                                )
                              ]
                            )
                            (C {(git)} {(diff)} {(--exit-code)} {(DQ ($ Id.VSub_DollarName '$vNew'))})
                          ]
                        )
                      ]
                    )
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:497)
                      fd: -1
                      arg_word: {(check_diff_apply.out)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:500)
                      fd: 2
                      arg_word: {(1)}
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.Simple
      words: [{(cvs)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:512)
          fd: -1
          arg_word: {(/dev/null)}
        )
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'2>&' span_id:515) 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: 533
                        )
                      )
                    }
                  spids: [531]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [518 528]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(command.Pipeline children:[(C {(test_have_prereq)} {(PERL)})] negated:T)]
          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: 554
                        )
                      )
                    }
                  spids: [552]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [541 549]
        )
      ]
    )
    (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:567))}
          ]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:570)
              fd: -1
              arg_word: {(/dev/null)}
            )
            (redir.Redir
              op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:573)
              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: 583
                        )
                      )
                    }
                  spids: [581]
                )
              ]
            )
            (C {(test_done)})
          ]
        )
      ]
    )
    (C {(unset)} {(GIT_DIR)} {(GIT_CONFIG)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:WORKDIR)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$PWD')}
          spids: [598]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:SERVERDIR)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$PWD') (/gitcvs.git)}
          spids: [601]
        )
      ]
    )
    (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: [605]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CVSROOT)
          op: assign_op.Equal
          rhs: {(DQ (':fork:') ($ Id.VSub_DollarName '$SERVERDIR'))}
          spids: [611]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CVSWORK)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$PWD') (/cvswork))}
          spids: [617]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CVS_SERVER)
          op: assign_op.Equal
          rhs: {(git-cvsserver)}
          spids: [623]
        )
      ]
    )
    (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 v1, b1' span_id:648))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:652) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "Simple text file" >textfile.c &&\n'
            span_id: 653
          ) (Token id:Id.Lit_Chars val:'\techo "t2" >t2 &&\n' span_id:654) 
          (Token id:Id.Lit_Chars val:'\tmkdir adir &&\n' span_id:655) (Token id:Id.Lit_Chars val:'\techo "adir/afile line1" >adir/afile &&\n' span_id:656) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "adir/afile line2" >>adir/afile &&\n'
            span_id: 657
          ) (Token id:Id.Lit_Chars val:'\techo "adir/afile line3" >>adir/afile &&\n' span_id:658) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "adir/afile line4" >>adir/afile &&\n'
            span_id: 659
          ) (Token id:Id.Lit_Chars val:'\techo "adir/a2file" >>adir/a2file &&\n' span_id:660) 
          (Token id:Id.Lit_Chars val:'\tmkdir adir/bdir &&\n' span_id:661) (Token id:Id.Lit_Chars val:'\techo "adir/bdir/bfile line 1" >adir/bdir/bfile &&\n' span_id:662) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "adir/bdir/bfile line 2" >>adir/bdir/bfile &&\n'
            span_id: 663
          ) (Token id:Id.Lit_Chars val:'\techo "adir/bdir/b2file" >adir/bdir/b2file &&\n' span_id:664) 
          (Token id:Id.Lit_Chars val:'\tgit add textfile.c t2 adir &&\n' span_id:665) (Token id:Id.Lit_Chars val:'\tgit commit -q -m "First Commit (v1)" &&\n' span_id:666) 
          (Token id:Id.Lit_Chars val:'\tgit tag v1 &&\n' span_id:667) (Token id:Id.Lit_Chars val:'\tgit branch b1 &&\n' span_id:668) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone -q --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&\n'
            span_id: 669
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&\n'
            span_id: 670
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log"\n'
            span_id: 671
          )
        )
      }
    )
    (C {(rm)} {(-rf)} {(cvswork)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs co v1' span_id:684))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:688) 
          (Token
            id: Id.Lit_Chars
            val: '\tcvs -f -Q co -r v1 -d cvswork master >cvs.log 2>&1 &&\n'
            span_id: 689
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:690) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork textfile.c v1 &&\n' span_id:691) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t2 v1 &&\n' span_id:692) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/afile v1 &&\n' span_id:693) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a2file v1 &&\n' span_id:694) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1 &&\n'
            span_id: 695
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b2file v1 &&\n' span_id:696) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_tree cvswork\n' span_id:697)
        )
      }
    )
    (C {(rm)} {(-rf)} {(cvswork)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs co b1' span_id:710))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:714) 
          (Token
            id: Id.Lit_Chars
            val: '\tcvs -f co -r b1 -d cvswork master >cvs.log 2>&1 &&\n'
            span_id: 715
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:716) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork textfile.c v1 &&\n' span_id:717) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t2 v1 &&\n' span_id:718) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/afile v1 &&\n' span_id:719) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a2file v1 &&\n' span_id:720) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1 &&\n'
            span_id: 721
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b2file v1 &&\n' span_id:722) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_tree cvswork\n' span_id:723)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs co b1 [cvswork3]' span_id:730))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:734) 
          (Token
            id: Id.Lit_Chars
            val: '\tcvs -f co -r b1 -d cvswork3 master >cvs.log 2>&1 &&\n'
            span_id: 735
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork3 &&\n' span_id:736) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork3 textfile.c v1 &&\n'
            span_id: 737
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 t2 v1 &&\n' span_id:738) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork3 adir/afile v1 &&\n'
            span_id: 739
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 adir/a2file v1 &&\n' span_id:740) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork3 adir/bdir/bfile v1 &&\n'
            span_id: 741
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 adir/bdir/b2file v1 &&\n' span_id:742) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork3 v1\n' span_id:743)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'edit cvswork3 and save diff' span_id:750))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:754) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:755) (Token id:Id.Lit_Chars val:'\t\tcd cvswork3 &&\n' span_id:756) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsed -e "s/line1/line1 - data/" adir/afile >adir/afileNEW &&\n'
            span_id: 757
          ) (Token id:Id.Lit_Chars val:'\t\tmv -f adir/afileNEW adir/afile &&\n' span_id:758) 
          (Token id:Id.Lit_Chars val:'\t\techo "afile5" >adir/afile5 &&\n' span_id:759) (Token id:Id.Lit_Chars val:'\t\trm t2 &&\n' span_id:760) 
          (Token id:Id.Lit_Chars val:'\t\tcvs -f add adir/afile5 &&\n' span_id:761) (Token id:Id.Lit_Chars val:'\t\tcvs -f rm t2 &&\n' span_id:762) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t! cvs -f diff -N -u >"$WORKDIR/cvswork3edit.diff"\n'
            span_id: 763
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:764)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup v1.2 on b1' span_id:771))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:775) 
          (Token id:Id.Lit_Chars val:'\tgit checkout b1 &&\n' span_id:776) (Token id:Id.Lit_Chars val:'\techo "new v1.2" >t3 &&\n' span_id:777) 
          (Token id:Id.Lit_Chars val:'\trm t2 &&\n' span_id:778) 
          (Token
            id: Id.Lit_Chars
            val: '\tsed -e "s/line3/line3 - more data/" adir/afile >adir/afileNEW &&\n'
            span_id: 779
          ) (Token id:Id.Lit_Chars val:'\tmv -f adir/afileNEW adir/afile &&\n' span_id:780) 
          (Token id:Id.Lit_Chars val:'\trm adir/a2file &&\n' span_id:781) (Token id:Id.Lit_Chars val:'\techo "a3file" >>adir/a3file &&\n' span_id:782) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "bfile line 3" >>adir/bdir/bfile &&\n'
            span_id: 783
          ) (Token id:Id.Lit_Chars val:'\trm adir/bdir/b2file &&\n' span_id:784) 
          (Token id:Id.Lit_Chars val:'\techo "b3file" >adir/bdir/b3file &&\n' span_id:785) (Token id:Id.Lit_Chars val:'\tmkdir cdir &&\n' span_id:786) 
          (Token id:Id.Lit_Chars val:'\techo "cdir/cfile" >cdir/cfile &&\n' span_id:787) (Token id:Id.Lit_Chars val:'\tgit add -A cdir adir t3 t2 &&\n' span_id:788) 
          (Token id:Id.Lit_Chars val:'\tgit commit -q -m ' span_id:789)
        ) (v1.2) 
        (SQ (Token id:Id.Lit_Chars val:' &&\n' span_id:793) 
          (Token id:Id.Lit_Chars val:'\tgit tag v1.2 &&\n' span_id:794) (Token id:Id.Lit_Chars val:'\tgit push --tags gitcvs.git b1:b1\n' span_id:795)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs -f up (on b1 adir)' span_id:802))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:806) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork/adir && cvs -f up -d ) >cvs.log 2>&1 &&\n'
            span_id: 807
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:808) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork textfile.c v1 &&\n' span_id:809) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t2 v1 &&\n' span_id:810) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/afile v1.2 &&\n'
            span_id: 811
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a3file v1.2 &&\n' span_id:812) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1.2 &&\n'
            span_id: 813
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b3file v1.2 &&\n' span_id:814) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_tree cvswork\n' span_id:815)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs up (on b1 /)' span_id:822))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:826) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up -d ) >cvs.log 2>&1 &&\n'
            span_id: 827
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:828) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork textfile.c v1.2 &&\n'
            span_id: 829
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t3 v1.2 &&\n' span_id:830) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/afile v1.2 &&\n'
            span_id: 831
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a3file v1.2 &&\n' span_id:832) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1.2 &&\n'
            span_id: 833
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b3file v1.2 &&\n' span_id:834) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork cdir/cfile v1.2 &&\n'
            span_id: 835
          ) (Token id:Id.Lit_Chars val:'\tcheck_end_tree cvswork\n' span_id:836)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs up (on b1 /) (again; check CVS/Tag files)' span_id:846))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:850) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up -d ) >cvs.log 2>&1 &&\n'
            span_id: 851
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:852) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork textfile.c v1.2 &&\n'
            span_id: 853
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t3 v1.2 &&\n' span_id:854) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/afile v1.2 &&\n'
            span_id: 855
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a3file v1.2 &&\n' span_id:856) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1.2 &&\n'
            span_id: 857
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b3file v1.2 &&\n' span_id:858) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork cdir/cfile v1.2 &&\n'
            span_id: 859
          ) (Token id:Id.Lit_Chars val:'\tcheck_end_tree cvswork\n' span_id:860)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs up -r v1' span_id:870))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:874) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up -r v1 ) >cvs.log 2>&1 &&\n'
            span_id: 875
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:876) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork textfile.c v1 &&\n' span_id:877) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t2 v1 &&\n' span_id:878) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/afile v1 &&\n' span_id:879) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a2file v1 &&\n' span_id:880) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1 &&\n'
            span_id: 881
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b2file v1 &&\n' span_id:882) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_tree cvswork\n' span_id:883)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs up' span_id:890))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:894) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up ) >cvs.log 2>&1 &&\n'
            span_id: 895
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:896) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork textfile.c v1 &&\n' span_id:897) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t2 v1 &&\n' span_id:898) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/afile v1 &&\n' span_id:899) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a2file v1 &&\n' span_id:900) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1 &&\n'
            span_id: 901
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b2file v1 &&\n' span_id:902) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_tree cvswork\n' span_id:903)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs up (again; check CVS/Tag files)' span_id:910))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:914) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up -d ) >cvs.log 2>&1 &&\n'
            span_id: 915
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:916) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork textfile.c v1 &&\n' span_id:917) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t2 v1 &&\n' span_id:918) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/afile v1 &&\n' span_id:919) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a2file v1 &&\n' span_id:920) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1 &&\n'
            span_id: 921
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b2file v1 &&\n' span_id:922) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_tree cvswork\n' span_id:923)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup simple b2' span_id:930))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:934) 
          (Token id:Id.Lit_Chars val:'\tgit branch b2 v1 &&\n' span_id:935) (Token id:Id.Lit_Chars val:'\tgit push --tags gitcvs.git b2:b2\n' span_id:936)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs co b2 [into cvswork2]' span_id:943))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:947) 
          (Token
            id: Id.Lit_Chars
            val: '\tcvs -f co -r b2 -d cvswork2 master >cvs.log 2>&1 &&\n'
            span_id: 948
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:949) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork textfile.c v1 &&\n' span_id:950) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t2 v1 &&\n' span_id:951) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/afile v1 &&\n' span_id:952) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a2file v1 &&\n' span_id:953) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1 &&\n'
            span_id: 954
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b2file v1 &&\n' span_id:955) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_tree cvswork\n' span_id:956)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'root dir edit [cvswork2]' span_id:963))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:967) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:968) (Token id:Id.Lit_Chars val:'\t\tcd cvswork2 && echo "Line 2" >>textfile.c &&\n' span_id:969) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t! cvs -f diff -u >"$WORKDIR/cvsEdit1.diff" &&\n'
            span_id: 970
          ) (Token id:Id.Lit_Chars val:'\t\tcvs -f commit -m "edit textfile.c" textfile.c\n' span_id:971) 
          (Token id:Id.Lit_Chars val:'\t) >cvsEdit1.log 2>&1\n' span_id:972)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'root dir rm file [cvswork2]' span_id:979))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:983) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:984) (Token id:Id.Lit_Chars val:'\t\tcd cvswork2 &&\n' span_id:985) 
          (Token id:Id.Lit_Chars val:'\t\tcvs -f rm -f t2 &&\n' span_id:986) (Token id:Id.Lit_Chars val:'\t\tcvs -f diff -u >../cvsEdit2-empty.diff &&\n' span_id:987) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t! cvs -f diff -N -u >"$WORKDIR/cvsEdit2-N.diff" &&\n'
            span_id: 988
          ) (Token id:Id.Lit_Chars val:'\t\tcvs -f commit -m "rm t2"\n' span_id:989) 
          (Token id:Id.Lit_Chars val:'\t) >cvsEdit2.log 2>&1\n' span_id:990)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'subdir edit/add/rm files [cvswork2]' span_id:997))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1001) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1002) (Token id:Id.Lit_Chars val:'\t\tcd cvswork2 &&\n' span_id:1003) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsed -e "s/line 1/line 1 (v2)/" adir/bdir/bfile >adir/bdir/bfileNEW &&\n'
            span_id: 1004
          ) (Token id:Id.Lit_Chars val:'\t\tmv -f adir/bdir/bfileNEW adir/bdir/bfile &&\n' span_id:1005) 
          (Token id:Id.Lit_Chars val:'\t\trm adir/bdir/b2file &&\n' span_id:1006) (Token id:Id.Lit_Chars val:'\t\tcd adir &&\n' span_id:1007) 
          (Token id:Id.Lit_Chars val:'\t\tcvs -f rm bdir/b2file &&\n' span_id:1008) (Token id:Id.Lit_Chars val:'\t\techo "4th file" >bdir/b4file &&\n' span_id:1009) 
          (Token id:Id.Lit_Chars val:'\t\tcvs -f add bdir/b4file &&\n' span_id:1010) (Token id:Id.Lit_Chars val:'\t\t! cvs -f diff -N -u >"$WORKDIR/cvsEdit3.diff" &&\n' span_id:1011) 
          (Token id:Id.Lit_Chars val:'\t\tgit fetch gitcvs.git b2:b2 &&\n' span_id:1012) (Token id:Id.Lit_Chars val:'\t\t(\n' span_id:1013) 
          (Token id:Id.Lit_Chars val:'\t\t  cd .. &&\n' span_id:1014) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t  ! cvs -f diff -u -N -r v1.2 >"$WORKDIR/cvsEdit3-v1.2.diff" &&\n'
            span_id: 1015
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t  ! cvs -f diff -u -N -r v1.2 -r v1 >"$WORKDIR/cvsEdit3-v1.2-v1.diff"\n'
            span_id: 1016
          ) (Token id:Id.Lit_Chars val:'\t\t) &&\n' span_id:1017) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcvs -f commit -m "various add/rm/edit"\n'
            span_id: 1018
          ) (Token id:Id.Lit_Chars val:'\t) >cvs.log 2>&1\n' span_id:1019)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'validate result of edits [cvswork2]' span_id:1026))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1030) 
          (Token id:Id.Lit_Chars val:'\tgit fetch gitcvs.git b2:b2 &&\n' span_id:1031) (Token id:Id.Lit_Chars val:'\tgit tag v2 b2 &&\n' span_id:1032) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit push --tags gitcvs.git b2:b2 &&\n'
            span_id: 1033
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork2 &&\n' span_id:1034) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork2 textfile.c v2 &&\n'
            span_id: 1035
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork2 adir/afile v2 &&\n' span_id:1036) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork2 adir/a2file v2 &&\n'
            span_id: 1037
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork2 adir/bdir/bfile v2 &&\n' span_id:1038) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork2 adir/bdir/b4file v2 &&\n'
            span_id: 1039
          ) (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork2 v2\n' span_id:1040)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'validate basic diffs saved during above cvswork2 edits'
            span_id: 1047
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1051) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(grep Index: cvsEdit1.diff | wc -l) = 1 &&\n'
            span_id: 1052
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty cvsEdit2-empty.diff &&\n' span_id:1053) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(grep Index: cvsEdit2-N.diff | wc -l) = 1 &&\n'
            span_id: 1054
          ) (Token id:Id.Lit_Chars val:'\ttest $(grep Index: cvsEdit3.diff | wc -l) = 3 &&\n' span_id:1055) 
          (Token id:Id.Lit_Chars val:'\trm -rf diffSandbox &&\n' span_id:1056) (Token id:Id.Lit_Chars val:'\tgit clone -q -n . diffSandbox &&\n' span_id:1057) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1058) (Token id:Id.Lit_Chars val:'\t\tcd diffSandbox &&\n' span_id:1059) 
          (Token id:Id.Lit_Chars val:'\t\tgit checkout v1 &&\n' span_id:1060) (Token id:Id.Lit_Chars val:'\t\tgit apply -p0 --index <"$WORKDIR/cvsEdit1.diff" &&\n' span_id:1061) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit apply -p0 --index <"$WORKDIR/cvsEdit2-N.diff" &&\n'
            span_id: 1062
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit apply -p0 --directory=adir --index <"$WORKDIR/cvsEdit3.diff" &&\n'
            span_id: 1063
          ) (Token id:Id.Lit_Chars val:'\t\tgit diff --exit-code v2\n' span_id:1064) 
          (Token id:Id.Lit_Chars val:'\t) >"check_diff_apply.out" 2>&1\n' span_id:1065)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'validate v1.2 diff saved during last cvswork2 edit'
            span_id: 1072
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1076) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(grep Index: cvsEdit3-v1.2.diff | wc -l) = 9 &&\n'
            span_id: 1077
          ) (Token id:Id.Lit_Chars val:'\tcheck_diff cvsEdit3-v1.2.diff v1.2 v2\n' span_id:1078)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'validate v1.2 v1 diff saved during last cvswork2 edit'
            span_id: 1085
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1089) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(grep Index: cvsEdit3-v1.2-v1.diff | wc -l) = 9 &&\n'
            span_id: 1090
          ) (Token id:Id.Lit_Chars val:'\tcheck_diff cvsEdit3-v1.2-v1.diff v1.2 v1\n' span_id:1091)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs up [cvswork2]' span_id:1098))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1102) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork2 && cvs -f up ) >cvs.log 2>&1 &&\n'
            span_id: 1103
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork2 &&\n' span_id:1104) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork2 textfile.c v2 &&\n'
            span_id: 1105
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork2 adir/afile v2 &&\n' span_id:1106) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork2 adir/a2file v2 &&\n'
            span_id: 1107
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork2 adir/bdir/bfile v2 &&\n' span_id:1108) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork2 adir/bdir/b4file v2 &&\n'
            span_id: 1109
          ) (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork2 v2\n' span_id:1110)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs up -r b2 [back to cvswork]' span_id:1117))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1121) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up -r b2 ) >cvs.log 2>&1 &&\n'
            span_id: 1122
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:1123) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork textfile.c v2 &&\n'
            span_id: 1124
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/afile v2 &&\n' span_id:1125) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/a2file v2 &&\n'
            span_id: 1126
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/bfile v2 &&\n' span_id:1127) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/b4file v2 &&\n'
            span_id: 1128
          ) (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork v2\n' span_id:1129)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs up -r b1' span_id:1136))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1140) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up -r b1 ) >cvs.log 2>&1 &&\n'
            span_id: 1141
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:1142) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork textfile.c v1.2 &&\n'
            span_id: 1143
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t3 v1.2 &&\n' span_id:1144) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/afile v1.2 &&\n'
            span_id: 1145
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a3file v1.2 &&\n' span_id:1146) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1.2 &&\n'
            span_id: 1147
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b3file v1.2 &&\n' span_id:1148) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork cdir/cfile v1.2 &&\n'
            span_id: 1149
          ) (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork v1.2\n' span_id:1150)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs up -A' span_id:1157))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1161) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up -A ) >cvs.log 2>&1 &&\n'
            span_id: 1162
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:1163) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork textfile.c v1 &&\n'
            span_id: 1164
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t2 v1 &&\n' span_id:1165) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/afile v1 &&\n'
            span_id: 1166
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a2file v1 &&\n' span_id:1167) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1 &&\n'
            span_id: 1168
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b2file v1 &&\n' span_id:1169) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork v1\n' span_id:1170)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs up (check CVS/Tag files)' span_id:1177))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1181) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up ) >cvs.log 2>&1 &&\n'
            span_id: 1182
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:1183) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork textfile.c v1 &&\n'
            span_id: 1184
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t2 v1 &&\n' span_id:1185) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/afile v1 &&\n'
            span_id: 1186
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a2file v1 &&\n' span_id:1187) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1 &&\n'
            span_id: 1188
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b2file v1 &&\n' span_id:1189) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork v1\n' span_id:1190)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs up -r heads/b1' span_id:1200))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1204) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up -r heads/b1 ) >cvs.log 2>&1 &&\n'
            span_id: 1205
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:1206) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork textfile.c v1.2 &&\n'
            span_id: 1207
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t3 v1.2 &&\n' span_id:1208) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/afile v1.2 &&\n'
            span_id: 1209
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a3file v1.2 &&\n' span_id:1210) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1.2 &&\n'
            span_id: 1211
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b3file v1.2 &&\n' span_id:1212) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork cdir/cfile v1.2 &&\n'
            span_id: 1213
          ) (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork v1.2\n' span_id:1214)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'cvs up -r heads_-s-b2 (cvsserver escape mechanism)'
            span_id: 1224
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1228) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up -r heads_-s-b2 ) >cvs.log 2>&1 &&\n'
            span_id: 1229
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:1230) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork textfile.c v2 &&\n'
            span_id: 1231
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/afile v2 &&\n' span_id:1232) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/a2file v2 &&\n'
            span_id: 1233
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/bfile v2 &&\n' span_id:1234) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/b4file v2 &&\n'
            span_id: 1235
          ) (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork v2\n' span_id:1236)
        )
      }
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:v1hash)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:1241)
                command_list: (command.CommandList children:[(C {(git)} {(rev-parse)} {(v1)})])
              )
            }
          spids: [1240]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs up -r $(git rev-parse v1)' span_id:1252))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1256) 
          (Token id:Id.Lit_Chars val:'\ttest -n "$v1hash" &&\n' span_id:1257) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f up -r "$v1hash" ) >cvs.log 2>&1 &&\n'
            span_id: 1258
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork &&\n' span_id:1259) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork textfile.c v1 &&\n'
            span_id: 1260
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork t2 v1 &&\n' span_id:1261) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/afile v1 &&\n'
            span_id: 1262
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/a2file v1 &&\n' span_id:1263) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork adir/bdir/bfile v1 &&\n'
            span_id: 1264
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork adir/bdir/b2file v1 &&\n' span_id:1265) 
          (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork v1\n' span_id:1266)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs diff -r v1 -u' span_id:1273))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1277) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && cvs -f diff -r v1 -u ) >cvsDiff.out 2>cvs.log &&\n'
            span_id: 1278
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty cvsDiff.out &&\n' span_id:1279) 
          (Token id:Id.Lit_Chars val:'\ttest_must_be_empty cvs.log\n' span_id:1280)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs diff -N -r v2 -u' span_id:1287))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1291) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && ! cvs -f diff -N -r v2 -u ) >cvsDiff.out 2>cvs.log &&\n'
            span_id: 1292
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty cvs.log &&\n' span_id:1293) 
          (Token id:Id.Lit_Chars val:'\ttest -s cvsDiff.out &&\n' span_id:1294) (Token id:Id.Lit_Chars val:'\tcheck_diff cvsDiff.out v2 v1 >check_diff.out 2>&1\n' span_id:1295)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'cvs diff -N -r v2 -r v1.2' span_id:1302))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1306) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork && ! cvs -f diff -N -r v2 -r v1.2 -u ) >cvsDiff.out 2>cvs.log &&\n'
            span_id: 1307
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty cvs.log &&\n' span_id:1308) 
          (Token id:Id.Lit_Chars val:'\ttest -s cvsDiff.out &&\n' span_id:1309) (Token id:Id.Lit_Chars val:'\tcheck_diff cvsDiff.out v2 v1.2 >check_diff.out 2>&1\n' span_id:1310)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'apply early [cvswork3] diff to b3' span_id:1317))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1321) 
          (Token id:Id.Lit_Chars val:'\tgit clone -q . gitwork3 &&\n' span_id:1322) (Token id:Id.Lit_Chars val:'\t(\n' span_id:1323) 
          (Token id:Id.Lit_Chars val:'\t\tcd gitwork3 &&\n' span_id:1324) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b b3 v1 &&\n' span_id:1325) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit apply -p0 --index <"$WORKDIR/cvswork3edit.diff" &&\n'
            span_id: 1326
          ) (Token id:Id.Lit_Chars val:'\t\tgit commit -m "cvswork3 edits applied"\n' span_id:1327) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:1328) (Token id:Id.Lit_Chars val:'\tgit fetch gitwork3 b3:b3 &&\n' span_id:1329) 
          (Token id:Id.Lit_Chars val:'\tgit tag v3 b3\n' span_id:1330)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check [cvswork3] diff' span_id:1337))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1341) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd cvswork3 && ! cvs -f diff -N -u ) >"$WORKDIR/cvsDiff.out" 2>cvs.log &&\n'
            span_id: 1342
          ) (Token id:Id.Lit_Chars val:'\ttest_must_be_empty cvs.log &&\n' span_id:1343) 
          (Token id:Id.Lit_Chars val:'\ttest -s cvsDiff.out &&\n' span_id:1344) (Token id:Id.Lit_Chars val:'\ttest $(grep Index: cvsDiff.out | wc -l) = 3 &&\n' span_id:1345) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp cvsDiff.out cvswork3edit.diff &&\n'
            span_id: 1346
          ) (Token id:Id.Lit_Chars val:'\tcheck_diff cvsDiff.out v1 v3 >check_diff.out 2>&1\n' span_id:1347)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'merge early [cvswork3] b3 with b1' span_id:1354))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1358) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd gitwork3 && git merge -m "message" b1 ) &&\n'
            span_id: 1359
          ) (Token id:Id.Lit_Chars val:'\tgit fetch gitwork3 b3:b3 &&\n' span_id:1360) 
          (Token id:Id.Lit_Chars val:'\tgit tag v3merged b3 &&\n' span_id:1361) (Token id:Id.Lit_Chars val:'\tgit push --tags gitcvs.git b3:b3\n' span_id:1362)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs up dirty [cvswork3]' span_id:1381))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1385) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1386) (Token id:Id.Lit_Chars val:'\t\tcd cvswork3 &&\n' span_id:1387) 
          (Token id:Id.Lit_Chars val:'\t\tcvs -f up &&\n' span_id:1388) (Token id:Id.Lit_Chars val:'\t\t! cvs -f diff -N -u >"$WORKDIR/cvsDiff.out"\n' span_id:1389) 
          (Token id:Id.Lit_Chars val:'\t) >cvs.log 2>&1 &&\n' span_id:1390) (Token id:Id.Lit_Chars val:'\ttest -s cvsDiff.out &&\n' span_id:1391) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest $(grep Index: cvsDiff.out | wc -l) = 2 &&\n'
            span_id: 1392
          ) (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork3 &&\n' span_id:1393) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork3 textfile.c v3merged &&\n'
            span_id: 1394
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 t3 v3merged &&\n' span_id:1395) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork3 adir/afile v3merged &&\n'
            span_id: 1396
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 adir/a3file v3merged &&\n' span_id:1397) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork3 adir/afile5 v3merged &&\n'
            span_id: 1398
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 adir/bdir/bfile v3merged &&\n' span_id:1399) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork3 adir/bdir/b3file v3merged &&\n'
            span_id: 1400
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 cdir/cfile v3merged &&\n' span_id:1401) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_end_full_tree cvswork3 v3merged\n'
            span_id: 1402
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cvs commit [cvswork3]' span_id:1413))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:1417) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:1418) (Token id:Id.Lit_Chars val:'\t\tcd cvswork3 &&\n' span_id:1419) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcvs -f commit -m "dirty sandbox after auto-merge"\n'
            span_id: 1420
          ) (Token id:Id.Lit_Chars val:'\t) >cvs.log 2>&1 &&\n' span_id:1421) 
          (Token id:Id.Lit_Chars val:'\tcheck_start_tree cvswork3 &&\n' span_id:1422) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 textfile.c v3merged &&\n' span_id:1423) 
          (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 t3 v3merged &&\n' span_id:1424) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 adir/afile v3merged &&\n' span_id:1425) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork3 adir/a3file v3merged &&\n'
            span_id: 1426
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 adir/afile5 v3merged &&\n' span_id:1427) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork3 adir/bdir/bfile v3merged &&\n'
            span_id: 1428
          ) (Token id:Id.Lit_Chars val:'\tcheck_file cvswork3 adir/bdir/b3file v3merged &&\n' span_id:1429) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_file cvswork3 cdir/cfile v3merged &&\n'
            span_id: 1430
          ) (Token id:Id.Lit_Chars val:'\tcheck_end_full_tree cvswork3 v3merged &&\n' span_id:1431) 
          (Token id:Id.Lit_Chars val:'\tgit fetch gitcvs.git b3:b4 &&\n' span_id:1432) (Token id:Id.Lit_Chars val:'\tgit tag v4.1 b4 &&\n' span_id:1433) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit diff --exit-code v4.1 v3merged >check_diff_apply.out 2>&1\n'
            span_id: 1434
          )
        )
      }
    )
    (C {(test_done)})
  ]
)