(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 svn authors file tests' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:26)
          fd: -1
          arg_word: {(svn-authors)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:30)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 36
          stdin_parts: [
            ('aa = AAAAAAA AAAAAAA <aa@example.com>\n')
            ('bb = BBBBBBB BBBBBBB <bb@example.com>\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup svnrepo' span_id:41))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\tfor i in aa bb cc dd\n' span_id:46) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:47) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd mkdir -m $i --username $i "$svnrepo"/$i\n'
            span_id: 48
          ) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:49) (Token id:Id.Lit_Chars val:'\t' span_id:50)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'start import with incomplete authors file' span_id:57))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:61) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git svn clone --authors-file=svn-authors "$svnrepo" x\n'
            span_id: 62
          ) (Token id:Id.Lit_Chars val:'\t' span_id:63)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'imported 2 revisions successfully' span_id:70))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:74) (Token id:Id.Lit_Chars val:'\t(\n' span_id:75) 
          (Token id:Id.Lit_Chars val:'\t\tcd x\n' span_id:76) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest "$(git rev-list refs/remotes/git-svn | wc -l)" -eq 2 &&\n'
            span_id: 77
          ) (Token id:Id.Lit_Chars val:'\t\tgit rev-list -1 --pretty=raw refs/remotes/git-svn | \\\n' span_id:78) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t  grep "^author BBBBBBB BBBBBBB <bb@example\\.com> " &&\n'
            span_id: 79
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-list -1 --pretty=raw refs/remotes/git-svn~1 | \\\n'
            span_id: 80
          ) (Token id:Id.Lit_Chars val:'\t\t  grep "^author AAAAAAA AAAAAAA <aa@example\\.com> "\n' span_id:81) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:82) (Token id:Id.Lit_Chars val:'\t' span_id:83)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_DGreat val:'>>' span_id:89)
          fd: -1
          arg_word: {(svn-authors)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:93)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 99
          stdin_parts: [
            ('cc = CCCCCCC CCCCCCC <cc@example.com>\n')
            ('dd = DDDDDDD DDDDDDD <dd@example.com>\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'continues to import once authors have been added'
            span_id: 104
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:108) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:109) (Token id:Id.Lit_Chars val:'\t\tcd x\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit svn fetch --authors-file=../svn-authors &&\n'
            span_id: 111
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest "$(git rev-list refs/remotes/git-svn | wc -l)" -eq 4 &&\n'
            span_id: 112
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-list -1 --pretty=raw refs/remotes/git-svn | \\\n'
            span_id: 113
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t  grep "^author DDDDDDD DDDDDDD <dd@example\\.com> " &&\n'
            span_id: 114
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-list -1 --pretty=raw refs/remotes/git-svn~1 | \\\n'
            span_id: 115
          ) (Token id:Id.Lit_Chars val:'\t\t  grep "^author CCCCCCC CCCCCCC <cc@example\\.com> "\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:117) (Token id:Id.Lit_Chars val:'\t' span_id:118)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'authors-file against globs' span_id:125))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:129) 
          (Token
            id: Id.Lit_Chars
            val: '\tsvn_cmd mkdir -m globs --username aa \\\n'
            span_id: 130
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t  "$svnrepo"/aa/trunk "$svnrepo"/aa/branches "$svnrepo"/aa/tags &&\n'
            span_id: 131
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit svn clone --authors-file=svn-authors -s "$svnrepo"/aa aa-work &&\n'
            span_id: 132
          ) (Token id:Id.Lit_Chars val:'\tfor i in bb ee cc\n' span_id:133) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:134) (Token id:Id.Lit_Chars val:'\t\tbranch="aa/branches/$i"\n' span_id:135) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn_cmd mkdir -m "$branch" --username $i "$svnrepo/$branch"\n'
            span_id: 136
          ) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:137) (Token id:Id.Lit_Chars val:'\t' span_id:138)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fetch fails on ee' span_id:145))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:149) 
          (Token
            id: Id.Lit_Chars
            val: '\t( cd aa-work && test_must_fail git svn fetch --authors-file=../svn-authors )\n'
            span_id: 150
          ) (Token id:Id.Lit_Chars val:'\t' span_id:151)
        )
      }
    )
    (command.ShFunction
      name: tmp_config_get
      body: 
        (command.BraceGroup
          children: [
            (C {(git)} {(config)} {(--file) (Id.Lit_Equals '=') (.git/svn/.metadata)} {(--get)} 
              {(DQ ($ Id.VSub_Number '$1'))}
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'failure happened without negative side effects' span_id:183))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:187) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:188) (Token id:Id.Lit_Chars val:'\t\tcd aa-work &&\n' span_id:189) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest 6 -eq "$(tmp_config_get svn-remote.svn.branches-maxRev)" &&\n'
            span_id: 190
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest 6 -eq "$(tmp_config_get svn-remote.svn.tags-maxRev)"\n'
            span_id: 191
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:192) (Token id:Id.Lit_Chars val:'\t' span_id:193)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_DGreat val:'>>' span_id:199)
          fd: -1
          arg_word: {(svn-authors)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:203)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 208
          stdin_parts: [('ee = EEEEEEE EEEEEEE <ee@example.com>\n')]
        )
      ]
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fetch continues after authors-file is fixed' span_id:213))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:217) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:218) (Token id:Id.Lit_Chars val:'\t\tcd aa-work &&\n' span_id:219) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit svn fetch --authors-file=../svn-authors &&\n'
            span_id: 220
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest 8 -eq "$(tmp_config_get svn-remote.svn.branches-maxRev)" &&\n'
            span_id: 221
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest 8 -eq "$(tmp_config_get svn-remote.svn.tags-maxRev)"\n'
            span_id: 222
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:223) (Token id:Id.Lit_Chars val:'\t' span_id:224)
        )
      }
    )
    (C {(test_expect_success)} {(Id.KW_Bang '!') (MINGW)} 
      {(SQ (Token id:Id.Lit_Chars val:'fresh clone with svn.authors-file in config' span_id:234))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:238) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:239) (Token id:Id.Lit_Chars val:'\t\trm -r "$GIT_DIR" &&\n' span_id:240) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest x = x"$(git config svn.authorsfile)" &&\n'
            span_id: 241
          ) (Token id:Id.Lit_Chars val:'\t\ttest_config="$HOME"/.gitconfig &&\n' span_id:242) 
          (Token id:Id.Lit_Chars val:'\t\tsane_unset GIT_DIR &&\n' span_id:243) (Token id:Id.Lit_Chars val:'\t\tgit config --global \\\n' span_id:244) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t  svn.authorsfile "$HOME"/svn-authors &&\n'
            span_id: 245
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest x"$HOME"/svn-authors = x"$(git config svn.authorsfile)" &&\n'
            span_id: 246
          ) (Token id:Id.Lit_Chars val:'\t\tgit svn clone "$svnrepo" gitconfig.clone &&\n' span_id:247) 
          (Token id:Id.Lit_Chars val:'\t\tcd gitconfig.clone &&\n' span_id:248) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tnr_ex=$(git log | grep "^Author:.*example.com" | wc -l) &&\n'
            span_id: 249
          ) (Token id:Id.Lit_Chars val:'\t\tnr_rev=$(git rev-list HEAD | wc -l) &&\n' span_id:250) 
          (Token id:Id.Lit_Chars val:'\t\ttest $nr_rev -eq $nr_ex\n' span_id:251) (Token id:Id.Lit_Chars val:'\t)\n' span_id:252)
        )
      }
    )
    (C {(test_debug)} 
      {(SQ (Token id:Id.Lit_Chars val:'GIT_DIR=gitconfig.clone/.git git log' span_id:259))}
    )
    (C {(test_done)})
  ]
)