(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 prog tests' span_id:15))}
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./lib-git-svn.sh)})
    (command.Simple
      words: [{(write_script)} {(svn-authors-prog)} {(DQ ($ Id.VSub_DollarName '$PERL_PATH'))}]
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLessDash val:'<<-' span_id:32)
          fd: -1
          here_begin: 
            {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\E' span_id:33)) (OF)}
          here_end_span_id: 42
          stdin_parts: [
            ('$_ = shift;\n')
            ('if (s/-sub$//)  {\n')
            ('print "$_ <$_\\@sub.example.com>\\n";\n')
            ('} else {\n')
            ('print "$_ <$_\\@example.com>\\n";\n')
            ('}\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'svn-authors setup' span_id:47))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\tcat >svn-authors <<-\\EOF\n' span_id:52) (Token id:Id.Lit_Chars val:'\tff = FFFFFFF FFFFFFF <fFf@other.example.com>\n' span_id:53) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:54)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup svnrepo' span_id:61))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:65) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor i in aa bb cc-sub dd-sub ee-foo ff\n'
            span_id: 66
          ) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:67) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsvn mkdir -m $i --username $i "$svnrepo"/$i\n'
            span_id: 68
          ) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:69)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'import authors with prog and file' span_id:76))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:80) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit svn clone --authors-prog=./svn-authors-prog \\\n'
            span_id: 81
          ) (Token id:Id.Lit_Chars val:'\t    --authors-file=svn-authors "$svnrepo" x\n' span_id:82)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'imported 6 revisions successfully' span_id:89))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:93) (Token id:Id.Lit_Chars val:'\t(\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\t\tcd x\n' span_id:95) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest "$(git rev-list refs/remotes/git-svn | wc -l)" -eq 6\n'
            span_id: 96
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:97)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'authors-prog ran correctly' 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 rev-list -1 --pretty=raw refs/remotes/git-svn~1 | \\\n'
            span_id: 111
          ) (Token id:Id.Lit_Chars val:'\t\t  grep "^author ee-foo <ee-foo@example\\.com> " &&\n' span_id:112) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-list -1 --pretty=raw refs/remotes/git-svn~2 | \\\n'
            span_id: 113
          ) (Token id:Id.Lit_Chars val:'\t\t  grep "^author dd <dd@sub\\.example\\.com> " &&\n' span_id:114) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-list -1 --pretty=raw refs/remotes/git-svn~3 | \\\n'
            span_id: 115
          ) (Token id:Id.Lit_Chars val:'\t\t  grep "^author cc <cc@sub\\.example\\.com> " &&\n' span_id:116) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-list -1 --pretty=raw refs/remotes/git-svn~4 | \\\n'
            span_id: 117
          ) (Token id:Id.Lit_Chars val:'\t\t  grep "^author bb <bb@example\\.com> " &&\n' span_id:118) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-list -1 --pretty=raw refs/remotes/git-svn~5 | \\\n'
            span_id: 119
          ) (Token id:Id.Lit_Chars val:'\t\t  grep "^author aa <aa@example\\.com> "\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:121)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'authors-file overrode authors-prog' span_id:128))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:133) (Token id:Id.Lit_Chars val:'\t\tcd x\n' span_id:134) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-list -1 --pretty=raw refs/remotes/git-svn | \\\n'
            span_id: 135
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t  grep "^author FFFFFFF FFFFFFF <fFf@other\\.example\\.com> "\n'
            span_id: 136
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:137)
        )
      }
    )
    (C {(git)} {(--git-dir) (Id.Lit_Equals '=') (x/.git)} {(config)} {(--unset)} {(svn.authorsfile)})
    (C {(git)} {(--git-dir) (Id.Lit_Equals '=') (x/.git)} {(config)} {(--unset)} {(svn.authorsprog)})
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'authors-prog handled special characters in username'
            span_id: 169
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) 
          (Token
            id: Id.Lit_Chars
            val: '\tsvn mkdir -m bad --username "xyz; touch evil" "$svnrepo"/bad &&\n'
            span_id: 174
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\t\tcd x &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\t\tgit svn --authors-prog=../svn-authors-prog fetch &&\n' span_id:177) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit rev-list -1 --pretty=raw refs/remotes/git-svn |\n'
            span_id: 178
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgrep "^author xyz; touch evil <xyz; touch evil@example\\.com> " &&\n'
            span_id: 179
          ) (Token id:Id.Lit_Chars val:'\t\t! test -f evil\n' span_id:180) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:181)
        )
      }
    )
    (C {(test_done)})
  ]
)