(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)}) ] )