(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:'Test export of commits to CVS' span_id:14))}
          spids: [12]
        )
      ]
    )
    (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:30)
            )
          ]
          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 cvsexportcommit tests, perl not available'
                          span_id: 37
                        )
                      )
                    }
                  spids: [35]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [23 32]
        )
      ]
    )
    (command.Simple
      words: [{(cvs)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:48)
          fd: -1
          arg_word: {(/dev/null)}
        )
        (redir.Redir op:(Token id:Id.Redir_GreatAnd val:'2>&' span_id:51) 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 cvsexportcommit tests, cvs not found'
                          span_id: 69
                        )
                      )
                    }
                  spids: [67]
                )
              ]
            )
            (C {(test_done)})
          ]
          spids: [54 64]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CVSROOT)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$PWD') (/tmpcvsroot)}
          spids: [78]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CVSWORK)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$PWD') (/cvswork)}
          spids: [82]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GIT_DIR)
          op: assign_op.Equal
          rhs: {($ Id.VSub_DollarName '$PWD') (/.git)}
          spids: [86]
        )
      ]
    )
    (C {(export)} {(CVSROOT)} {(CVSWORK)} {(GIT_DIR)})
    (C {(rm)} {(-rf)} {(DQ ($ Id.VSub_DollarName '$CVSROOT'))} {(DQ ($ Id.VSub_DollarName '$CVSWORK'))})
    (command.AndOr
      ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DPipe]
      children: [
        (C {(cvs)} {(init)})
        (C {(test)} {(-d)} {(DQ ($ Id.VSub_DollarName '$CVSROOT'))})
        (C {(cvs)} {(-Q)} {(co)} {(-d)} {(DQ ($ Id.VSub_DollarName '$CVSWORK'))} {(.)})
        (command.Simple
          words: [{(echo)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:146)
              fd: -1
              arg_word: {(empty)}
            )
          ]
        )
        (C {(git)} {(add)} {(empty)})
        (command.Simple
          words: [{(git)} {(commit)} {(-q)} {(-a)} {(-m)} {(DQ (Initial))}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'2>' span_id:173)
              fd: 2
              arg_word: {(/dev/null)}
            )
          ]
        )
        (command.ControlFlow
          token: (Token id:Id.ControlFlow_Exit val:exit span_id:178)
          arg_word: {(1)}
        )
      ]
    )
    (command.ShFunction
      name: check_entries
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(sed)} {(-ne)} {(SQ (Token id:Id.Lit_Chars val:'/^\\//p' span_id:200))} 
                  {(DQ ($ Id.VSub_Number '$1') (/CVS/Entries))}
                )
                (C {(sort)})
                (command.Simple
                  words: [{(cut)} {(-d/)} {(-f2) (Id.Lit_Comma ',') (3) (Id.Lit_Comma ',') (5)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:224)
                      fd: -1
                      arg_word: {(actual)}
                    )
                  ]
                )
              ]
              negated: F
            )
            (command.If
              arms: [
                (if_arm
                  cond: [(C {(test)} {(-z)} {(DQ ($ Id.VSub_Number '$2'))})]
                  action: [
                    (command.Simple
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:242)
                          fd: -1
                          arg_word: {(expected)}
                        )
                      ]
                    )
                  ]
                  spids: [228 239]
                )
              ]
              else_action: [
                (command.Pipeline
                  children: [
                    (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s\\n' span_id:252))} 
                      {(DQ ($ Id.VSub_Number '$2'))}
                    )
                    (command.Simple
                      words: [
                        {(tr)}
                        {(SQ (Token id:Id.Lit_Chars val:'|' span_id:264))}
                        {(SQ (Token id:Id.Lit_Chars val:'\\012' span_id:268))}
                      ]
                      redirects: [
                        (redir.Redir
                          op: (Token id:Id.Redir_Great val:'>' span_id:271)
                          fd: -1
                          arg_word: {(expected)}
                        )
                      ]
                    )
                  ]
                  negated: F
                )
              ]
            )
            (C {(test_cmp)} {(expected)} {(actual)})
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'New file' span_id:292))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'mkdir A B C D E F &&\n' span_id:298) 
          (Token id:Id.Lit_Chars val:'     echo hello1 >A/newfile1.txt &&\n' span_id:299) (Token id:Id.Lit_Chars val:'     echo hello2 >B/newfile2.txt &&\n' span_id:300) 
          (Token
            id: Id.Lit_Chars
            val: '     cp "$TEST_DIRECTORY"/test-binary-1.png C/newfile3.png &&\n'
            span_id: 301
          ) 
          (Token
            id: Id.Lit_Chars
            val: '     cp "$TEST_DIRECTORY"/test-binary-1.png D/newfile4.png &&\n'
            span_id: 302
          ) (Token id:Id.Lit_Chars val:'     git add A/newfile1.txt &&\n' span_id:303) 
          (Token id:Id.Lit_Chars val:'     git add B/newfile2.txt &&\n' span_id:304) (Token id:Id.Lit_Chars val:'     git add C/newfile3.png &&\n' span_id:305) 
          (Token id:Id.Lit_Chars val:'     git add D/newfile4.png &&\n' span_id:306) (Token id:Id.Lit_Chars val:'     git commit -a -m "Test: New file" &&\n' span_id:307) 
          (Token
            id: Id.Lit_Chars
            val: '     id=$(git rev-list --max-count=1 HEAD) &&\n'
            span_id: 308
          ) (Token id:Id.Lit_Chars val:'     (cd "$CVSWORK" &&\n' span_id:309) 
          (Token id:Id.Lit_Chars val:'     git cvsexportcommit -c $id &&\n' span_id:310) (Token id:Id.Lit_Chars val:'     check_entries A "newfile1.txt/1.1/" &&\n' span_id:311) 
          (Token
            id: Id.Lit_Chars
            val: '     check_entries B "newfile2.txt/1.1/" &&\n'
            span_id: 312
          ) (Token id:Id.Lit_Chars val:'     check_entries C "newfile3.png/1.1/-kb" &&\n' span_id:313) 
          (Token
            id: Id.Lit_Chars
            val: '     check_entries D "newfile4.png/1.1/-kb" &&\n'
            span_id: 314
          ) (Token id:Id.Lit_Chars val:'     test_cmp A/newfile1.txt ../A/newfile1.txt &&\n' span_id:315) 
          (Token
            id: Id.Lit_Chars
            val: '     test_cmp B/newfile2.txt ../B/newfile2.txt &&\n'
            span_id: 316
          ) (Token id:Id.Lit_Chars val:'     test_cmp C/newfile3.png ../C/newfile3.png &&\n' span_id:317) 
          (Token
            id: Id.Lit_Chars
            val: '     test_cmp D/newfile4.png ../D/newfile4.png\n'
            span_id: 318
          ) (Token id:Id.Lit_Chars val:'     )' span_id:319)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Remove two files, add two and update two' span_id:328))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'echo Hello1 >>A/newfile1.txt &&\n' span_id:334) 
          (Token id:Id.Lit_Chars val:'     rm -f B/newfile2.txt &&\n' span_id:335) (Token id:Id.Lit_Chars val:'     rm -f C/newfile3.png &&\n' span_id:336) 
          (Token id:Id.Lit_Chars val:'     echo Hello5  >E/newfile5.txt &&\n' span_id:337) 
          (Token
            id: Id.Lit_Chars
            val: '     cp "$TEST_DIRECTORY"/test-binary-2.png D/newfile4.png &&\n'
            span_id: 338
          ) 
          (Token
            id: Id.Lit_Chars
            val: '     cp "$TEST_DIRECTORY"/test-binary-1.png F/newfile6.png &&\n'
            span_id: 339
          ) (Token id:Id.Lit_Chars val:'     git add E/newfile5.txt &&\n' span_id:340) 
          (Token id:Id.Lit_Chars val:'     git add F/newfile6.png &&\n' span_id:341) (Token id:Id.Lit_Chars val:'     git commit -a -m "Test: Remove, add and update" &&\n' span_id:342) 
          (Token
            id: Id.Lit_Chars
            val: '     id=$(git rev-list --max-count=1 HEAD) &&\n'
            span_id: 343
          ) (Token id:Id.Lit_Chars val:'     (cd "$CVSWORK" &&\n' span_id:344) 
          (Token id:Id.Lit_Chars val:'     git cvsexportcommit -c $id &&\n' span_id:345) (Token id:Id.Lit_Chars val:'     check_entries A "newfile1.txt/1.2/" &&\n' span_id:346) 
          (Token id:Id.Lit_Chars val:'     check_entries B "" &&\n' span_id:347) (Token id:Id.Lit_Chars val:'     check_entries C "" &&\n' span_id:348) 
          (Token
            id: Id.Lit_Chars
            val: '     check_entries D "newfile4.png/1.2/-kb" &&\n'
            span_id: 349
          ) (Token id:Id.Lit_Chars val:'     check_entries E "newfile5.txt/1.1/" &&\n' span_id:350) 
          (Token
            id: Id.Lit_Chars
            val: '     check_entries F "newfile6.png/1.1/-kb" &&\n'
            span_id: 351
          ) (Token id:Id.Lit_Chars val:'     test_cmp A/newfile1.txt ../A/newfile1.txt &&\n' span_id:352) 
          (Token
            id: Id.Lit_Chars
            val: '     test_cmp D/newfile4.png ../D/newfile4.png &&\n'
            span_id: 353
          ) (Token id:Id.Lit_Chars val:'     test_cmp E/newfile5.txt ../E/newfile5.txt &&\n' span_id:354) 
          (Token
            id: Id.Lit_Chars
            val: '     test_cmp F/newfile6.png ../F/newfile6.png\n'
            span_id: 355
          ) (Token id:Id.Lit_Chars val:'     )' span_id:356)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'Fail to change binary more than one generation old'
            span_id: 368
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'cat F/newfile6.png >>D/newfile4.png &&\n' span_id:374) 
          (Token
            id: Id.Lit_Chars
            val: '     git commit -a -m "generatiion 1" &&\n'
            span_id: 375
          ) (Token id:Id.Lit_Chars val:'     cat F/newfile6.png >>D/newfile4.png &&\n' span_id:376) 
          (Token
            id: Id.Lit_Chars
            val: '     git commit -a -m "generation 2" &&\n'
            span_id: 377
          ) (Token id:Id.Lit_Chars val:'     id=$(git rev-list --max-count=1 HEAD) &&\n' span_id:378) 
          (Token id:Id.Lit_Chars val:'     (cd "$CVSWORK" &&\n' span_id:379) (Token id:Id.Lit_Chars val:'     test_must_fail git cvsexportcommit -c $id\n' span_id:380) 
          (Token id:Id.Lit_Chars val:'     )' span_id:381)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Remove only binary files' span_id:434))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'git reset --hard HEAD^^ &&\n' span_id:440) 
          (Token id:Id.Lit_Chars val:'     rm -f D/newfile4.png &&\n' span_id:441) 
          (Token
            id: Id.Lit_Chars
            val: '     git commit -a -m "test: remove only a binary file" &&\n'
            span_id: 442
          ) (Token id:Id.Lit_Chars val:'     id=$(git rev-list --max-count=1 HEAD) &&\n' span_id:443) 
          (Token id:Id.Lit_Chars val:'     (cd "$CVSWORK" &&\n' span_id:444) (Token id:Id.Lit_Chars val:'     git cvsexportcommit -c $id &&\n' span_id:445) 
          (Token
            id: Id.Lit_Chars
            val: '     check_entries A "newfile1.txt/1.2/" &&\n'
            span_id: 446
          ) (Token id:Id.Lit_Chars val:'     check_entries B "" &&\n' span_id:447) 
          (Token id:Id.Lit_Chars val:'     check_entries C "" &&\n' span_id:448) (Token id:Id.Lit_Chars val:'     check_entries D "" &&\n' span_id:449) 
          (Token
            id: Id.Lit_Chars
            val: '     check_entries E "newfile5.txt/1.1/" &&\n'
            span_id: 450
          ) (Token id:Id.Lit_Chars val:'     check_entries F "newfile6.png/1.1/-kb" &&\n' span_id:451) 
          (Token
            id: Id.Lit_Chars
            val: '     test_cmp A/newfile1.txt ../A/newfile1.txt &&\n'
            span_id: 452
          ) (Token id:Id.Lit_Chars val:'     test_cmp E/newfile5.txt ../E/newfile5.txt &&\n' span_id:453) 
          (Token
            id: Id.Lit_Chars
            val: '     test_cmp F/newfile6.png ../F/newfile6.png\n'
            span_id: 454
          ) (Token id:Id.Lit_Chars val:'     )' span_id:455)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'Remove only a text file' span_id:464))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f A/newfile1.txt &&\n' span_id:470) 
          (Token
            id: Id.Lit_Chars
            val: '     git commit -a -m "test: remove only a binary file" &&\n'
            span_id: 471
          ) (Token id:Id.Lit_Chars val:'     id=$(git rev-list --max-count=1 HEAD) &&\n' span_id:472) 
          (Token id:Id.Lit_Chars val:'     (cd "$CVSWORK" &&\n' span_id:473) (Token id:Id.Lit_Chars val:'     git cvsexportcommit -c $id &&\n' span_id:474) 
          (Token id:Id.Lit_Chars val:'     check_entries A "" &&\n' span_id:475) (Token id:Id.Lit_Chars val:'     check_entries B "" &&\n' span_id:476) 
          (Token id:Id.Lit_Chars val:'     check_entries C "" &&\n' span_id:477) (Token id:Id.Lit_Chars val:'     check_entries D "" &&\n' span_id:478) 
          (Token
            id: Id.Lit_Chars
            val: '     check_entries E "newfile5.txt/1.1/" &&\n'
            span_id: 479
          ) (Token id:Id.Lit_Chars val:'     check_entries F "newfile6.png/1.1/-kb" &&\n' span_id:480) 
          (Token
            id: Id.Lit_Chars
            val: '     test_cmp E/newfile5.txt ../E/newfile5.txt &&\n'
            span_id: 481
          ) (Token id:Id.Lit_Chars val:'     test_cmp F/newfile6.png ../F/newfile6.png\n' span_id:482) 
          (Token id:Id.Lit_Chars val:'     )' span_id:483)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'New file with spaces in file name' span_id:492))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'mkdir "G g" &&\n' span_id:498) 
          (Token
            id: Id.Lit_Chars
            val: '      echo ok then >"G g/with spaces.txt" &&\n'
            span_id: 499
          ) (Token id:Id.Lit_Chars val:'      git add "G g/with spaces.txt" && \\\n' span_id:500) 
          (Token
            id: Id.Lit_Chars
            val: '      cp "$TEST_DIRECTORY"/test-binary-1.png "G g/with spaces.png" && \\\n'
            span_id: 501
          ) (Token id:Id.Lit_Chars val:'      git add "G g/with spaces.png" &&\n' span_id:502) 
          (Token
            id: Id.Lit_Chars
            val: '      git commit -a -m "With spaces" &&\n'
            span_id: 503
          ) (Token id:Id.Lit_Chars val:'      id=$(git rev-list --max-count=1 HEAD) &&\n' span_id:504) 
          (Token id:Id.Lit_Chars val:'      (cd "$CVSWORK" &&\n' span_id:505) (Token id:Id.Lit_Chars val:'      git cvsexportcommit -c $id &&\n' span_id:506) 
          (Token
            id: Id.Lit_Chars
            val: '      check_entries "G g" "with spaces.png/1.1/-kb|with spaces.txt/1.1/"\n'
            span_id: 507
          ) (Token id:Id.Lit_Chars val:'      )' span_id:508)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Update file with spaces in file name' span_id:517))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'echo Ok then >>"G g/with spaces.txt" &&\n' span_id:523) 
          (Token
            id: Id.Lit_Chars
            val: '      cat "$TEST_DIRECTORY"/test-binary-1.png >>"G g/with spaces.png" && \\\n'
            span_id: 524
          ) (Token id:Id.Lit_Chars val:'      git add "G g/with spaces.png" &&\n' span_id:525) 
          (Token
            id: Id.Lit_Chars
            val: '      git commit -a -m "Update with spaces" &&\n'
            span_id: 526
          ) (Token id:Id.Lit_Chars val:'      id=$(git rev-list --max-count=1 HEAD) &&\n' span_id:527) 
          (Token id:Id.Lit_Chars val:'      (cd "$CVSWORK" &&\n' span_id:528) (Token id:Id.Lit_Chars val:'      git cvsexportcommit -c $id\n' span_id:529) 
          (Token
            id: Id.Lit_Chars
            val: '      check_entries "G g" "with spaces.png/1.2/-kb|with spaces.txt/1.2/"\n'
            span_id: 530
          ) (Token id:Id.Lit_Chars val:'      )' span_id:531)
        )
      }
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (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:p)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (
'\xc3\x85/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/\xc3\xa5/\xc3\xa4/\xc3\xb6'
                            )
                          )
                        }
                      spids: [543]
                    )
                  ]
                )
                (C {(mkdir)} {(-p)} {(DQ (tst/) ($ Id.VSub_DollarName '$p'))})
                (command.Simple
                  words: [{(date)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:565)
                      fd: -1
                      arg_word: {(DQ (tst/) ($ Id.VSub_DollarName '$p') (/day))}
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:found)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:576)
                            command_list: 
                              (command.CommandList
                                children: [(C {(find)} {(tst)} {(-type)} {(f)} {(-print)})]
                              )
                          )
                        }
                      spids: [575]
                    )
                  ]
                )
                (C {(test)} {(DQ (z) ($ Id.VSub_DollarName '$found'))} {(Id.Lit_Equals '=')} 
                  {(DQ (ztst/) ($ Id.VSub_DollarName '$p') (/day))}
                )
                (C {(rm)} {(-fr)} {(tst)})
              ]
            )
          ]
          action: [
            (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
              {(SQ (Token id:Id.Lit_Chars val:'File with non-ascii file name' span_id:629))} 
              {
                (SQ 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'mkdir -p \xc3\x85/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/\xc3\xa5/\xc3\xa4/\xc3\xb6 &&\n'
                    span_id: 635
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'      echo Foo >\xc3\x85/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/\xc3\xa5/\xc3\xa4/\xc3\xb6/g\xc3\xa5rdets\xc3\xa5g\xc3\xa5rdet.txt &&\n'
                    span_id: 636
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'      git add \xc3\x85/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/\xc3\xa5/\xc3\xa4/\xc3\xb6/g\xc3\xa5rdets\xc3\xa5g\xc3\xa5rdet.txt &&\n'
                    span_id: 637
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'      cp "$TEST_DIRECTORY"/test-binary-1.png \xc3\x85/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/\xc3\xa5/\xc3\xa4/\xc3\xb6/g\xc3\xa5rdets\xc3\xa5g\xc3\xa5rdet.png &&\n'
                    span_id: 638
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'      git add \xc3\x85/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/\xc3\xa5/\xc3\xa4/\xc3\xb6/g\xc3\xa5rdets\xc3\xa5g\xc3\xa5rdet.png &&\n'
                    span_id: 639
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: '      git commit -a -m "G\xc3\xa5r det s\xc3\xa5 g\xc3\xa5r det" && \\\n'
                    span_id: 640
                  ) (Token id:Id.Lit_Chars val:'      id=$(git rev-list --max-count=1 HEAD) &&\n' span_id:641) 
                  (Token
                    id: Id.Lit_Chars
                    val: '      (cd "$CVSWORK" &&\n'
                    span_id: 642
                  ) (Token id:Id.Lit_Chars val:'      git cvsexportcommit -v -c $id &&\n' span_id:643) 
                  (Token
                    id: Id.Lit_Chars
                    val: '      check_entries \\\n'
                    span_id: 644
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'      "\xc3\x85/goo/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/\xc3\xa5/\xc3\xa4/\xc3\xb6" \\\n'
                    span_id: 645
                  ) 
                  (Token
                    id: Id.Lit_Chars
                    val: 
'      "g\xc3\xa5rdets\xc3\xa5g\xc3\xa5rdet.png/1.1/-kb|g\xc3\xa5rdets\xc3\xa5g\xc3\xa5rdet.txt/1.1/"\n'
                    span_id: 646
                  ) (Token id:Id.Lit_Chars val:'      )' span_id:647)
                )
              }
            )
          ]
          spids: [541 615]
        )
      ]
    )
    (C {(rm)} {(-fr)} {(tst)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'Mismatching patch should fail' span_id:666))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'date >>"E/newfile5.txt" &&\n' span_id:672) 
          (Token id:Id.Lit_Chars val:'      git add "E/newfile5.txt" &&\n' span_id:673) (Token id:Id.Lit_Chars val:'      git commit -a -m "Update one" &&\n' span_id:674) 
          (Token id:Id.Lit_Chars val:'      date >>"E/newfile5.txt" &&\n' span_id:675) (Token id:Id.Lit_Chars val:'      git add "E/newfile5.txt" &&\n' span_id:676) 
          (Token
            id: Id.Lit_Chars
            val: '      git commit -a -m "Update two" &&\n'
            span_id: 677
          ) (Token id:Id.Lit_Chars val:'      id=$(git rev-list --max-count=1 HEAD) &&\n' span_id:678) 
          (Token id:Id.Lit_Chars val:'      (cd "$CVSWORK" &&\n' span_id:679) (Token id:Id.Lit_Chars val:'      test_must_fail git cvsexportcommit -c $id\n' span_id:680) 
          (Token id:Id.Lit_Chars val:'      )' span_id:681)
        )
      }
    )
    (C {(test_expect_success)} {(FILEMODE)} 
      {(SQ (Token id:Id.Lit_Chars val:'Retain execute bit' span_id:692))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'mkdir G &&\n' span_id:698) 
          (Token id:Id.Lit_Chars val:'      echo executeon >G/on &&\n' span_id:699) (Token id:Id.Lit_Chars val:'      chmod +x G/on &&\n' span_id:700) 
          (Token id:Id.Lit_Chars val:'      echo executeoff >G/off &&\n' span_id:701) (Token id:Id.Lit_Chars val:'      git add G/on &&\n' span_id:702) 
          (Token id:Id.Lit_Chars val:'      git add G/off &&\n' span_id:703) (Token id:Id.Lit_Chars val:'      git commit -a -m "Execute test" &&\n' span_id:704) 
          (Token id:Id.Lit_Chars val:'      (cd "$CVSWORK" &&\n' span_id:705) (Token id:Id.Lit_Chars val:'      git cvsexportcommit -c HEAD\n' span_id:706) 
          (Token id:Id.Lit_Chars val:'      test -x G/on &&\n' span_id:707) (Token id:Id.Lit_Chars val:'      ! test -x G/off\n' span_id:708) 
          (Token id:Id.Lit_Chars val:'      )' span_id:709)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'-w option should work with relative GIT_DIR' span_id:716))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:720) 
          (Token id:Id.Lit_Chars val:'      mkdir W &&\n' span_id:721) (Token id:Id.Lit_Chars val:'      echo foobar >W/file1.txt &&\n' span_id:722) 
          (Token id:Id.Lit_Chars val:'      echo bazzle >W/file2.txt &&\n' span_id:723) (Token id:Id.Lit_Chars val:'      git add W/file1.txt &&\n' span_id:724) 
          (Token id:Id.Lit_Chars val:'      git add W/file2.txt &&\n' span_id:725) (Token id:Id.Lit_Chars val:'      git commit -m "More updates" &&\n' span_id:726) 
          (Token
            id: Id.Lit_Chars
            val: '      id=$(git rev-list --max-count=1 HEAD) &&\n'
            span_id: 727
          ) (Token id:Id.Lit_Chars val:'      (cd "$GIT_DIR" &&\n' span_id:728) 
          (Token
            id: Id.Lit_Chars
            val: '      GIT_DIR=. git cvsexportcommit -w "$CVSWORK" -c $id &&\n'
            span_id: 729
          ) 
          (Token
            id: Id.Lit_Chars
            val: '      check_entries "$CVSWORK/W" "file1.txt/1.1/|file2.txt/1.1/" &&\n'
            span_id: 730
          ) (Token id:Id.Lit_Chars val:'      test_cmp "$CVSWORK/W/file1.txt" ../W/file1.txt &&\n' span_id:731) 
          (Token
            id: Id.Lit_Chars
            val: '      test_cmp "$CVSWORK/W/file2.txt" ../W/file2.txt\n'
            span_id: 732
          ) (Token id:Id.Lit_Chars val:'      )\n' span_id:733)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check files before directories' span_id:740))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:744) (Token id:Id.Lit_Chars val:'\n' span_id:745) 
          (Token id:Id.Lit_Chars val:'\techo Notes > release-notes &&\n' span_id:746) (Token id:Id.Lit_Chars val:'\tgit add release-notes &&\n' span_id:747) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "Add release notes" release-notes &&\n'
            span_id: 748
          ) (Token id:Id.Lit_Chars val:'\tid=$(git rev-parse HEAD) &&\n' span_id:749) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cvsexportcommit -w "$CVSWORK" -c $id &&\n'
            span_id: 750
          ) (Token id:Id.Lit_Chars val:'\n' span_id:751) 
          (Token id:Id.Lit_Chars val:'\techo new > DS &&\n' span_id:752) (Token id:Id.Lit_Chars val:'\techo new > E/DS &&\n' span_id:753) 
          (Token id:Id.Lit_Chars val:'\techo modified > release-notes &&\n' span_id:754) (Token id:Id.Lit_Chars val:'\tgit add DS E/DS release-notes &&\n' span_id:755) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "Add two files with the same basename" &&\n'
            span_id: 756
          ) (Token id:Id.Lit_Chars val:'\tid=$(git rev-parse HEAD) &&\n' span_id:757) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cvsexportcommit -w "$CVSWORK" -c $id &&\n'
            span_id: 758
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_entries "$CVSWORK/E" "DS/1.1/|newfile5.txt/1.1/" &&\n'
            span_id: 759
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tcheck_entries "$CVSWORK" "DS/1.1/|release-notes/1.2/" &&\n'
            span_id: 760
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp "$CVSWORK/DS" DS &&\n' span_id:761) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp "$CVSWORK/E/DS" E/DS &&\n' span_id:762) (Token id:Id.Lit_Chars val:'\ttest_cmp "$CVSWORK/release-notes" release-notes\n' span_id:763) 
          (Token id:Id.Lit_Chars val:'\n' span_id:764)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 're-commit a removed filename which remains in CVS attic'
            span_id: 771
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:775) (Token id:Id.Lit_Chars val:'\n' span_id:776) 
          (Token id:Id.Lit_Chars val:'    (cd "$CVSWORK" &&\n' span_id:777) (Token id:Id.Lit_Chars val:'     echo >attic_gremlin &&\n' span_id:778) 
          (Token id:Id.Lit_Chars val:'     cvs -Q add attic_gremlin &&\n' span_id:779) (Token id:Id.Lit_Chars val:'     cvs -Q ci -m "added attic_gremlin" &&\n' span_id:780) 
          (Token id:Id.Lit_Chars val:'     rm attic_gremlin &&\n' span_id:781) (Token id:Id.Lit_Chars val:'     cvs -Q rm attic_gremlin &&\n' span_id:782) 
          (Token
            id: Id.Lit_Chars
            val: '     cvs -Q ci -m "removed attic_gremlin") &&\n'
            span_id: 783
          ) (Token id:Id.Lit_Chars val:'\n' span_id:784) 
          (Token id:Id.Lit_Chars val:'    echo > attic_gremlin &&\n' span_id:785) (Token id:Id.Lit_Chars val:'    git add attic_gremlin &&\n' span_id:786) 
          (Token
            id: Id.Lit_Chars
            val: '    git commit -m "Added attic_gremlin" &&\n'
            span_id: 787
          ) (Token id:Id.Lit_Chars val:'\tgit cvsexportcommit -w "$CVSWORK" -c HEAD &&\n' span_id:788) 
          (Token
            id: Id.Lit_Chars
            val: '    (cd "$CVSWORK"; cvs -Q update -d) &&\n'
            span_id: 789
          ) (Token id:Id.Lit_Chars val:'    test -f "$CVSWORK/attic_gremlin"\n' span_id:790)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'commit a file with leading spaces in the name' span_id:806))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:810) (Token id:Id.Lit_Chars val:'\n' span_id:811) 
          (Token id:Id.Lit_Chars val:'\techo space > " space" &&\n' span_id:812) (Token id:Id.Lit_Chars val:'\tgit add " space" &&\n' span_id:813) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit commit -m "Add a file with a leading space" &&\n'
            span_id: 814
          ) (Token id:Id.Lit_Chars val:'\tid=$(git rev-parse HEAD) &&\n' span_id:815) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cvsexportcommit -w "$CVSWORK" -c $id &&\n'
            span_id: 816
          ) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tcheck_entries "$CVSWORK" " space/1.1/|DS/1.1/|attic_gremlin/1.3/|release-notes/1.2/" &&\n'
            span_id: 817
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp "$CVSWORK/ space" " space"\n' span_id:818) 
          (Token id:Id.Lit_Chars val:'\n' span_id:819)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'use the same checkout for Git and CVS' span_id:826))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:830) (Token id:Id.Lit_Chars val:'\n' span_id:831) 
          (Token id:Id.Lit_Chars val:'\t(mkdir shared &&\n' span_id:832) (Token id:Id.Lit_Chars val:'\t cd shared &&\n' span_id:833) 
          (Token id:Id.Lit_Chars val:'\t sane_unset GIT_DIR &&\n' span_id:834) (Token id:Id.Lit_Chars val:'\t cvs co . &&\n' span_id:835) 
          (Token id:Id.Lit_Chars val:'\t git init &&\n' span_id:836) (Token id:Id.Lit_Chars val:'\t git add " space" &&\n' span_id:837) 
          (Token
            id: Id.Lit_Chars
            val: '\t git commit -m "fake initial commit" &&\n'
            span_id: 838
          ) (Token id:Id.Lit_Chars val:'\t echo Hello >> " space" &&\n' span_id:839) 
          (Token
            id: Id.Lit_Chars
            val: '\t git commit -m "Another change" " space" &&\n'
            span_id: 840
          ) (Token id:Id.Lit_Chars val:'\t git cvsexportcommit -W -p -u -c HEAD &&\n' span_id:841) 
          (Token id:Id.Lit_Chars val:'\t grep Hello " space" &&\n' span_id:842) (Token id:Id.Lit_Chars val:'\t git diff-files)\n' span_id:843) 
          (Token id:Id.Lit_Chars val:'\n' span_id:844)
        )
      }
    )
    (C {(test_done)})
  ]
)