(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_op.Equal
          rhs: {(SQ <'Test workflows involving pull request.'>)}
          spids: [4]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (C {<test_expect_success>} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit init --bare upstream.git &&\n'> 
          <'\tgit init --bare downstream.git &&\n'> <'\tgit clone upstream.git upstream-private &&\n'> <'\tgit clone downstream.git local &&\n'> <'\n'> 
          <'\ttrash_url="file://$TRASH_DIRECTORY" &&\n'> <'\tdownstream_url="$trash_url/downstream.git/" &&\n'> 
          <'\tupstream_url="$trash_url/upstream.git/" &&\n'> <'\n'> <'\t(\n'> <'\t\tcd upstream-private &&\n'> <'\t\tcat <<-\\EOT >mnemonic.txt &&\n'> 
          <'\t\tThirtey days hath November,\n'> <'\t\tAprile, June, and September:\n'> <'\t\tEOT\n'> <'\t\tgit add mnemonic.txt &&\n'> 
          <'\t\ttest_tick &&\n'> <'\t\tgit commit -m "\\"Thirty days\\", a reminder of month lengths" &&\n'> 
          <'\t\tgit tag -m "version 1" -a initial &&\n'> <'\t\tgit push --tags origin master\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd local &&\n'> 
          <'\t\tgit remote add upstream "$trash_url/upstream.git" &&\n'> <'\t\tgit fetch upstream &&\n'> <'\t\tgit pull upstream master &&\n'> 
          <'\t\tcat <<-\\EOT >>mnemonic.txt &&\n'> <'\t\tOf twyecescore-eightt is but eine,\n'> <'\t\tAnd all the remnante be thrycescore-eine.\n'> 
          <'\t\tO’course Leap yare comes an’pynes,\n'> <'\t\tEv’rie foure yares, gote it ryghth.\n'> 
          <'\t\tAn’twyecescore-eight is but twyecescore-nyne.\n'> <'\t\tEOT\n'> <'\t\tgit add mnemonic.txt &&\n'> <'\t\ttest_tick &&\n'> 
          <'\t\tgit commit -m "More detail" &&\n'> <'\t\tgit tag -m "version 2" -a full &&\n'> <'\t\tgit checkout -b simplify HEAD^ &&\n'> 
          <'\t\tmv mnemonic.txt mnemonic.standard &&\n'> <'\t\tcat <<-\\EOT >mnemonic.clarified &&\n'> <'\t\tThirty days has September,\n'> 
          <'\t\tAll the rest I can’t remember.\n'> <'\t\tEOT\n'> <'\t\tgit add -N mnemonic.standard mnemonic.clarified &&\n'> 
          <'\t\tgit commit -a -m "Adapt to use modern, simpler English\n'> <'\n'> <'But keep the old version, too, in case some people prefer it." &&\n'> 
          <'\t\tgit checkout master\n'> <'\t)\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'setup: two scripts for reading pull requests'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tdownstream_url_for_sed=$(\n'> <'\t\tprintf "%s\\n" "$downstream_url" |\n'> 
          <'\t\tsed -e '>
        ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''>) (SQ <'s/\\\\/\\\\\\\\/g'>) 
        (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''>) (SQ <' -e '>) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''>) (SQ <'s/[[/.*^$]/\\\\&/g'>) 
        (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\''>) 
        (SQ <'\n'> <'\t) &&\n'> <'\n'> <'\tcat <<-\\EOT >read-request.sed &&\n'> <'\t#!/bin/sed -nf\n'> 
          <'\t# Note that a request could ask for "tag $tagname"\n'> <'\t/ in the git repository at:$/!d\n'> <'\tn\n'> <'\t/^$/ n\n'> <'\ts/ tag \\([^ ]*\\)$/ tag--\\1/\n'> 
          <'\ts/^[ \t]*\\(.*\\) \\([^ ]*\\)/please pull\\\n'> <'\t\\1\\\n'> <'\t\\2/p\n'> <'\tq\n'> <'\tEOT\n'> <'\n'> <'\tcat <<-EOT >fuzz.sed\n'> 
          <'\t#!/bin/sed -nf\n'> <'\ts/$downstream_url_for_sed/URL/g\n'> <'\ts/$_x40/OBJECT_NAME/g\n'> <'\ts/A U Thor/AUTHOR/g\n'> 
          <'\ts/[-0-9]\\{10\\} [:0-9]\\{8\\} [-+][0-9]\\{4\\}/DATE/g\n'> <'\ts/        [^ ].*/        SUBJECT/g\n'> <'\ts/  [^ ].* (DATE)/  SUBJECT (DATE)/g\n'> 
          <'\ts|tags/full|BRANCH|g\n'> <'\ts/mnemonic.txt/FILENAME/g\n'> <'\ts/^version [0-9]/VERSION/\n'> 
          <'\t/^ FILENAME | *[0-9]* [-+]*\\$/ b diffstat\n'> <'\t/^AUTHOR ([0-9]*):\\$/ b shortlog\n'> <'\tp\n'> <'\tb\n'> <'\t: diffstat\n'> <'\tn\n'> 
          <'\t/ [0-9]* files* changed/ {\n'> <'\t\ta\\\\\n'> <'\tDIFFSTAT\n'> <'\t\tb\n'> <'\t}\n'> <'\tb diffstat\n'> <'\t: shortlog\n'> 
          <'\t/^        [a-zA-Z]/ n\n'> <'\t/^[a-zA-Z]* ([0-9]*):\\$/ n\n'> <'\t/^\\$/ N\n'> <'\t/^\\n[a-zA-Z]* ([0-9]*):\\$/!{\n'> 
          <'\t\ta\\\\\n'> <'\tSHORTLOG\n'> <'\t\tD\n'> <'\t}\n'> <'\tn\n'> <'\tb shortlog\n'> <'\tEOT\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'pull request when forgot to push'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -fr downstream.git &&\n'> <'\tgit init --bare downstream.git &&\n'> 
          <'\t(\n'> <'\t\tcd local &&\n'> <'\t\tgit checkout initial &&\n'> <'\t\tgit merge --ff-only master &&\n'> 
          <'\t\ttest_must_fail git request-pull initial "$downstream_url" \\\n'> <'\t\t\t2>../err\n'> <'\t) &&\n'> <'\tgrep "No match for commit .*" err &&\n'> 
          <'\tgrep "Are you sure you pushed" err\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'pull request after push'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -fr downstream.git &&\n'> <'\tgit init --bare downstream.git &&\n'> 
          <'\t(\n'> <'\t\tcd local &&\n'> <'\t\tgit checkout initial &&\n'> <'\t\tgit merge --ff-only master &&\n'> 
          <'\t\tgit push origin master:for-upstream &&\n'> <'\t\tgit request-pull initial origin master:for-upstream >../request\n'> <'\t) &&\n'> 
          <'\tsed -nf read-request.sed <request >digest &&\n'> <'\tcat digest &&\n'> <'\t{\n'> <'\t\tread task &&\n'> <'\t\tread repository &&\n'> <'\t\tread branch\n'> 
          <'\t} <digest &&\n'> <'\t(\n'> <'\t\tcd upstream-private &&\n'> <'\t\tgit checkout initial &&\n'> 
          <'\t\tgit pull --ff-only "$repository" "$branch"\n'> <'\t) &&\n'> <'\ttest "$branch" = for-upstream &&\n'> 
          <'\ttest_cmp local/mnemonic.txt upstream-private/mnemonic.txt\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'request asks HEAD to be pulled'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -fr downstream.git &&\n'> <'\tgit init --bare downstream.git &&\n'> 
          <'\t(\n'> <'\t\tcd local &&\n'> <'\t\tgit checkout initial &&\n'> <'\t\tgit merge --ff-only master &&\n'> 
          <'\t\tgit push --tags origin master simplify &&\n'> <'\t\tgit push origin master:for-upstream &&\n'> 
          <'\t\tgit request-pull initial "$downstream_url" >../request\n'> <'\t) &&\n'> <'\tsed -nf read-request.sed <request >digest &&\n'> <'\tcat digest &&\n'> <'\t{\n'> 
          <'\t\tread task &&\n'> <'\t\tread repository &&\n'> <'\t\tread branch\n'> <'\t} <digest &&\n'> <'\ttest -z "$branch"\n'> <'\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'pull request format'>)} 
      {
        (SQ <'\n'> <'\n'> <'\trm -fr downstream.git &&\n'> <'\tgit init --bare downstream.git &&\n'> 
          <'\tcat <<-\\EOT >expect &&\n'> <'\tThe following changes since commit OBJECT_NAME:\n'> <'\n'> <'\t  SUBJECT (DATE)\n'> <'\n'> 
          <'\tare available in the git repository at:\n'> <'\n'> <'\t  URL BRANCH\n'> <'\n'> <'\tfor you to fetch changes up to OBJECT_NAME:\n'> <'\n'> 
          <'\t  SUBJECT (DATE)\n'> <'\n'> <'\t----------------------------------------------------------------\n'> <'\tVERSION\n'> <'\n'> 
          <'\t----------------------------------------------------------------\n'> <'\tSHORTLOG\n'> <'\n'> <'\tDIFFSTAT\n'> <'\tEOT\n'> <'\t(\n'> <'\t\tcd local &&\n'> 
          <'\t\tgit checkout initial &&\n'> <'\t\tgit merge --ff-only master &&\n'> <'\t\tgit push origin tags/full &&\n'> 
          <'\t\tgit request-pull initial "$downstream_url" tags/full >../request\n'> <'\t) &&\n'> <'\t<request sed -nf fuzz.sed >request.fuzzy &&\n'> 
          <'\ttest_i18ncmp expect request.fuzzy &&\n'> <'\n'> <'\t(\n'> <'\t\tcd local &&\n'> 
          <'\t\tgit request-pull initial "$downstream_url" tags/full:refs/tags/full\n'> <'\t) >request &&\n'> <'\tsed -nf fuzz.sed <request >request.fuzzy &&\n'> 
          <'\ttest_i18ncmp expect request.fuzzy &&\n'> <'\n'> <'\t(\n'> <'\t\tcd local &&\n'> <'\t\tgit request-pull initial "$downstream_url" full\n'> 
          <'\t) >request &&\n'> <'\tgrep " tags/full\\$" request\n'>
        )
      }
    )
    (C {<test_expect_success>} {(SQ <'request-pull ignores OPTIONS_KEEPDASHDASH poison'>)} 
      {
        (SQ <'\n'> <'\n'> <'\t(\n'> <'\t\tcd local &&\n'> <'\t\tOPTIONS_KEEPDASHDASH=Yes &&\n'> 
          <'\t\texport OPTIONS_KEEPDASHDASH &&\n'> <'\t\tgit checkout initial &&\n'> <'\t\tgit merge --ff-only master &&\n'> 
          <'\t\tgit push origin master:for-upstream &&\n'> <'\t\tgit request-pull -- initial "$downstream_url" master:for-upstream >../request\n'> <'\t)\n'> 
          <'\n'>
        )
      }
    )
    (C {<test_done>})
  ]
)