(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 smart fetching over http via http-backend'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-httpd.sh)})
    (C {(start_httpd)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup repository' span_id:26))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:30) 
          (Token id:Id.Lit_Chars val:'\tgit config push.default matching &&\n' span_id:31) (Token id:Id.Lit_Chars val:'\techo content >file &&\n' span_id:32) 
          (Token id:Id.Lit_Chars val:'\tgit add file &&\n' span_id:33) (Token id:Id.Lit_Chars val:'\tgit commit -m one\n' span_id:34)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create http-accessible bare repository' span_id:41))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:45) 
          (Token
            id: Id.Lit_Chars
            val: '\tmkdir "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n'
            span_id: 46
          ) (Token id:Id.Lit_Chars val:'\t(cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\t git --bare init\n' span_id:48) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:49) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit remote add public "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n'
            span_id: 50
          ) (Token id:Id.Lit_Chars val:'\tgit push public master:master\n' span_id:51)
        )
      }
    )
    (C {(setup_askpass_helper)})
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:60) fd:-1 arg_word:{(exp)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:63)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 84
          stdin_parts: [
            ('> GET /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1\n')
            ('> Accept: */*\n')
            ('> Accept-Encoding: gzip\n')
            ('> Pragma: no-cache\n')
            ('< HTTP/1.1 200 OK\n')
            ('< Pragma: no-cache\n')
            ('< Cache-Control: no-cache, max-age=0, must-revalidate\n')
            ('< Content-Type: application/x-git-upload-pack-advertisement\n')
            ('> POST /smart/repo.git/git-upload-pack HTTP/1.1\n')
            ('> Accept-Encoding: gzip\n')
            ('> Content-Type: application/x-git-upload-pack-request\n')
            ('> Accept: application/x-git-upload-pack-result\n')
            ('> Content-Length: xxx\n')
            ('< HTTP/1.1 200 OK\n')
            ('< Pragma: no-cache\n')
            ('< Cache-Control: no-cache, max-age=0, must-revalidate\n')
            ('< Content-Type: application/x-git-upload-pack-result\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clone http repository' span_id:88))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:92) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tGIT_TRACE_CURL=true git clone --quiet $HTTPD_URL/smart/repo.git clone 2>err &&\n'
            span_id: 93
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp file clone/file &&\n' span_id:94) 
          (Token id:Id.Lit_Chars val:'\ttr ' span_id:95)
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:97)) 
        (SQ (Token id:Id.Lit_Chars val:'\\015' span_id:99)) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:101)) 
        (SQ (Token id:Id.Lit_Chars val:' Q <err |\n' span_id:103) 
          (Token id:Id.Lit_Chars val:'\tsed -e "\n' span_id:104) (Token id:Id.Lit_Chars val:'\t\ts/Q\\$//\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\t\t/^[*] /d\n' span_id:106) (Token id:Id.Lit_Chars val:'\t\t/^== Info:/d\n' span_id:107) 
          (Token id:Id.Lit_Chars val:'\t\t/^=> Send header, /d\n' span_id:108) (Token id:Id.Lit_Chars val:'\t\t/^=> Send header:$/d\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\t\t/^<= Recv header, /d\n' span_id:110) (Token id:Id.Lit_Chars val:'\t\t/^<= Recv header:$/d\n' span_id:111) 
          (Token id:Id.Lit_Chars val:'\t\ts/=> Send header: //\n' span_id:112) (Token id:Id.Lit_Chars val:'\t\ts/= Recv header://\n' span_id:113) 
          (Token id:Id.Lit_Chars val:'\t\t/^<= Recv data/d\n' span_id:114) (Token id:Id.Lit_Chars val:'\t\t/^=> Send data/d\n' span_id:115) 
          (Token id:Id.Lit_Chars val:'\t\t/^$/d\n' span_id:116) (Token id:Id.Lit_Chars val:'\t\t/^< $/d\n' span_id:117) (Token id:Id.Lit_Chars val:'\n' span_id:118) 
          (Token id:Id.Lit_Chars val:'\t\t/^[^><]/{\n' span_id:119) (Token id:Id.Lit_Chars val:'\t\t\ts/^/> /\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\t\t}\n' span_id:121) (Token id:Id.Lit_Chars val:'\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\t\t/^> User-Agent: /d\n' span_id:123) (Token id:Id.Lit_Chars val:'\t\t/^> Host: /d\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\t\t/^> POST /,$ {\n' span_id:125) (Token id:Id.Lit_Chars val:'\t\t\t/^> Accept: [*]\\\\/[*]/d\n' span_id:126) 
          (Token id:Id.Lit_Chars val:'\t\t}\n' span_id:127) (Token id:Id.Lit_Chars val:'\t\ts/^> Content-Length: .*/> Content-Length: xxx/\n' span_id:128) 
          (Token id:Id.Lit_Chars val:'\t\t/^> 00..want /d\n' span_id:129) (Token id:Id.Lit_Chars val:'\t\t/^> 00.*done/d\n' span_id:130) 
          (Token id:Id.Lit_Chars val:'\n' span_id:131) (Token id:Id.Lit_Chars val:'\t\t/^< Server: /d\n' span_id:132) 
          (Token id:Id.Lit_Chars val:'\t\t/^< Expires: /d\n' span_id:133) (Token id:Id.Lit_Chars val:'\t\t/^< Date: /d\n' span_id:134) 
          (Token id:Id.Lit_Chars val:'\t\t/^< Content-Length: /d\n' span_id:135) (Token id:Id.Lit_Chars val:'\t\t/^< Transfer-Encoding: /d\n' span_id:136) 
          (Token id:Id.Lit_Chars val:'\t" >act &&\n' span_id:137) (Token id:Id.Lit_Chars val:'\ttest_cmp exp act\n' span_id:138)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'fetch changes via http' span_id:145))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:149) 
          (Token id:Id.Lit_Chars val:'\techo content >>file &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\tgit commit -a -m two &&\n' span_id:151) 
          (Token id:Id.Lit_Chars val:'\tgit push public &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\t(cd clone && git pull) &&\n' span_id:153) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp file clone/file\n' span_id:154)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:160) fd:-1 arg_word:{(exp)})
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:163)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 171
          stdin_parts: [
            ('GET  /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1 200\n')
            ('POST /smart/repo.git/git-upload-pack HTTP/1.1 200\n')
            ('GET  /smart/repo.git/info/refs?service=git-upload-pack HTTP/1.1 200\n')
            ('POST /smart/repo.git/git-upload-pack HTTP/1.1 200\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'used upload-pack service' span_id:175))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:179) 
          (Token id:Id.Lit_Chars val:'\tsed -e "\n' span_id:180) (Token id:Id.Lit_Chars val:'\t\ts/^.* \\"//\n' span_id:181) 
          (Token id:Id.Lit_Chars val:'\t\ts/\\"//\n' span_id:182) (Token id:Id.Lit_Chars val:'\t\ts/ [1-9][0-9]*\\$//\n' span_id:183) 
          (Token id:Id.Lit_Chars val:'\t\ts/^GET /GET  /\n' span_id:184) (Token id:Id.Lit_Chars val:'\t" >act <"$HTTPD_ROOT_PATH"/access.log &&\n' span_id:185) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp exp act\n' span_id:186)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'follow redirects (301)' span_id:193))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:197) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone $HTTPD_URL/smart-redir-perm/repo.git --quiet repo-p\n'
            span_id: 198
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'follow redirects (302)' span_id:205))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:209) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone $HTTPD_URL/smart-redir-temp/repo.git --quiet repo-t\n'
            span_id: 210
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'redirects re-root further requests' span_id:217))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:221) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone $HTTPD_URL/smart-redir-limited/repo.git repo-redir-limited\n'
            span_id: 222
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'clone from password-protected repository' span_id:229))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:233) 
          (Token id:Id.Lit_Chars val:'\techo two >expect &&\n' span_id:234) (Token id:Id.Lit_Chars val:'\tset_askpass user@host pass@host &&\n' span_id:235) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --bare "$HTTPD_URL/auth/smart/repo.git" smart-auth &&\n'
            span_id: 236
          ) (Token id:Id.Lit_Chars val:'\texpect_askpass both user@host &&\n' span_id:237) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=smart-auth log -1 --format=%s >actual &&\n'
            span_id: 238
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:239)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'clone from auth-only-for-push repository' span_id:246))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:250) 
          (Token id:Id.Lit_Chars val:'\techo two >expect &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\tset_askpass wrong &&\n' span_id:252) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --bare "$HTTPD_URL/auth-push/smart/repo.git" smart-noauth &&\n'
            span_id: 253
          ) (Token id:Id.Lit_Chars val:'\texpect_askpass none &&\n' span_id:254) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=smart-noauth log -1 --format=%s >actual &&\n'
            span_id: 255
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:256)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'clone from auth-only-for-objects repository' span_id:263))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:267) 
          (Token id:Id.Lit_Chars val:'\techo two >expect &&\n' span_id:268) (Token id:Id.Lit_Chars val:'\tset_askpass user@host pass@host &&\n' span_id:269) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --bare "$HTTPD_URL/auth-fetch/smart/repo.git" half-auth &&\n'
            span_id: 270
          ) (Token id:Id.Lit_Chars val:'\texpect_askpass both user@host &&\n' span_id:271) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=half-auth log -1 --format=%s >actual &&\n'
            span_id: 272
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:273)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'no-op half-auth fetch does not require a password'
            span_id: 280
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:284) 
          (Token id:Id.Lit_Chars val:'\tset_askpass wrong &&\n' span_id:285) (Token id:Id.Lit_Chars val:'\tgit --git-dir=half-auth fetch &&\n' span_id:286) 
          (Token id:Id.Lit_Chars val:'\texpect_askpass none\n' span_id:287)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'redirects send auth to new location' span_id:294))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:298) 
          (Token id:Id.Lit_Chars val:'\tset_askpass user@host pass@host &&\n' span_id:299) (Token id:Id.Lit_Chars val:'\tgit -c credential.useHttpPath=true \\\n' span_id:300) 
          (Token
            id: Id.Lit_Chars
            val: '\t  clone $HTTPD_URL/smart-redir-auth/repo.git repo-redir-auth &&\n'
            span_id: 301
          ) (Token id:Id.Lit_Chars val:'\texpect_askpass both user@host auth/smart/repo.git\n' span_id:302)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'disable dumb http on server' span_id:309))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:313) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" \\\n'
            span_id: 314
          ) (Token id:Id.Lit_Chars val:'\t\tconfig http.getanyfile false\n' span_id:315)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'GIT_SMART_HTTP can disable smart http' span_id:322))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:326) 
          (Token id:Id.Lit_Chars val:'\t(GIT_SMART_HTTP=0 &&\n' span_id:327) (Token id:Id.Lit_Chars val:'\t export GIT_SMART_HTTP &&\n' span_id:328) 
          (Token id:Id.Lit_Chars val:'\t cd clone &&\n' span_id:329) (Token id:Id.Lit_Chars val:'\t test_must_fail git fetch)\n' span_id:330)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'invalid Content-Type rejected' span_id:337))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:341) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git clone $HTTPD_URL/broken_smart/repo.git 2>actual &&\n'
            span_id: 342
          ) (Token id:Id.Lit_Chars val:'\tgrep "not valid:" actual\n' span_id:343)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create namespaced refs' span_id:350))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:354) 
          (Token id:Id.Lit_Chars val:'\ttest_commit namespaced &&\n' span_id:355) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit push public HEAD:refs/namespaces/ns/refs/heads/master &&\n'
            span_id: 356
          ) (Token id:Id.Lit_Chars val:'\tgit --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" \\\n' span_id:357) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tsymbolic-ref refs/namespaces/ns/HEAD refs/namespaces/ns/refs/heads/master\n'
            span_id: 358
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'smart clone respects namespace' span_id:365))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:369) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone "$HTTPD_URL/smart_namespace/repo.git" ns-smart &&\n'
            span_id: 370
          ) (Token id:Id.Lit_Chars val:'\techo namespaced >expect &&\n' span_id:371) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=ns-smart/.git log -1 --format=%s >actual &&\n'
            span_id: 372
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:373)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'dumb clone via http-backend respects namespace' span_id:380))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:384) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" \\\n'
            span_id: 385
          ) (Token id:Id.Lit_Chars val:'\t\tconfig http.getanyfile true &&\n' span_id:386) 
          (Token id:Id.Lit_Chars val:'\tGIT_SMART_HTTP=0 git clone \\\n' span_id:387) (Token id:Id.Lit_Chars val:'\t\t"$HTTPD_URL/smart_namespace/repo.git" ns-dumb &&\n' span_id:388) 
          (Token id:Id.Lit_Chars val:'\techo namespaced >expect &&\n' span_id:389) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit --git-dir=ns-dumb/.git log -1 --format=%s >actual &&\n'
            span_id: 390
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:391)
        )
      }
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:397)
          fd: -1
          arg_word: {(cookies.txt)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:400)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 405
          stdin_parts: [('127.0.0.1\tFALSE\t/smart_cookies/\tFALSE\t0\tothername\tothervalue\n')]
        )
      ]
    )
    (command.Simple
      words: [{(cat)}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:408)
          fd: -1
          arg_word: {(expect_cookies.txt)}
        )
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:411)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 418
          stdin_parts: [
            ('\n')
            ('127.0.0.1\tFALSE\t/smart_cookies/\tFALSE\t0\tothername\tothervalue\n')
            ('127.0.0.1\tFALSE\t/smart_cookies/repo.git/info/\tFALSE\t0\tname\tvalue\n')
          ]
        )
      ]
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'cookies stored in http.cookiefile when http.savecookies set'
            span_id: 422
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:426) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config http.cookiefile cookies.txt &&\n'
            span_id: 427
          ) (Token id:Id.Lit_Chars val:'\tgit config http.savecookies true &&\n' span_id:428) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit ls-remote $HTTPD_URL/smart_cookies/repo.git master &&\n'
            span_id: 429
          ) (Token id:Id.Lit_Chars val:'\ttail -3 cookies.txt >cookies_tail.txt &&\n' span_id:430) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_cmp expect_cookies.txt cookies_tail.txt\n'
            span_id: 431
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'transfer.hiderefs works over smart-http' span_id:438))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:442) 
          (Token id:Id.Lit_Chars val:'\ttest_commit hidden &&\n' span_id:443) (Token id:Id.Lit_Chars val:'\ttest_commit visible &&\n' span_id:444) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit push public HEAD^:refs/heads/a HEAD:refs/heads/b &&\n'
            span_id: 445
          ) (Token id:Id.Lit_Chars val:'\tgit --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/repo.git" \\\n' span_id:446) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tconfig transfer.hiderefs refs/heads/a &&\n'
            span_id: 447
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit clone --bare "$HTTPD_URL/smart/repo.git" hidden.git &&\n'
            span_id: 448
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git -C hidden.git rev-parse --verify a &&\n'
            span_id: 449
          ) (Token id:Id.Lit_Chars val:'\tgit -C hidden.git rev-parse --verify b\n' span_id:450)
        )
      }
    )
    (command.ShFunction
      name: create_tags
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (C {(rm)} {(-f)} {(marks)})
                (command.Pipeline
                  children: [
                    (command.ForEach
                      iter_name: i
                      iter_words: [
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:480)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (C {(test_seq)} {(DQ ($ Id.VSub_Number '$1'))} 
                                    {(DQ ($ Id.VSub_Number '$2'))}
                                  )
                                ]
                              )
                          )
                        }
                      ]
                      do_arg_iter: F
                      body: 
                        (command.DoGroup
                          children: [
                            (command.AndOr
                              ops: [
                                Id.Op_DAmp
                                Id.Op_DAmp
                                Id.Op_DAmp
                                Id.Op_DAmp
                                Id.Op_DAmp
                                Id.Op_DAmp
                                Id.Op_DAmp
                                Id.Op_DAmp
                              ]
                              children: [
                                (C {(echo)} 
                                  {(DQ ('commit refs/heads/too-many-refs-') ($ Id.VSub_Number '$1'))}
                                )
                                (C {(echo)} {(DQ ('mark :') ($ Id.VSub_DollarName '$i'))})
                                (C {(echo)} 
                                  {
                                    (DQ ('committer git <git@example.com> ') 
                                      ($ Id.VSub_DollarName '$i') (' +0000')
                                    )
                                  }
                                )
                                (C {(echo)} {(DQ ('data 0'))})
                                (C {(echo)} {(DQ ('M 644 inline bla.txt'))})
                                (C {(echo)} {(DQ ('data 4'))})
                                (C {(echo)} {(DQ (bla))})
                                (C {(echo)} 
                                  {(DQ ('reset refs/heads/too-many-refs-') ($ Id.VSub_Number '$1'))}
                                )
                                (C {(echo)} {(DQ ('from :') ($ Id.VSub_Number '$1'))})
                              ]
                            )
                          ]
                        )
                    )
                    (C {(git)} {(fast-import)} {(--export-marks) (Id.Lit_Equals '=') (marks)})
                  ]
                  negated: F
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:tag)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:618)
                            command_list: 
                              (command.CommandList
                                children: [
                                  (C {(perl)} {(-e)} 
                                    {
                                      (DQ ('print ') 
                                        (word_part.EscapedLiteral
                                          token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:625)
                                        ) (bla) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:627)) (' x 30')
                                      )
                                    }
                                  )
                                ]
                              )
                          )
                        }
                      spids: [617]
                    )
                  ]
                )
                (command.Simple
                  words: [
                    {(sed)}
                    {(-e)}
                    {
                      (DQ ('s|^:') (Id.Lit_Other '\\') ('([^ ]*') (Id.Lit_Other '\\') (') ') 
                        (Id.Lit_Other '\\') ('(.*') (Id.Lit_Other '\\') (')') (Id.Lit_Other '$') ('|') (Id.Lit_Other '\\') ('2 refs/tags/') 
                        ($ Id.VSub_DollarName '$tag') (-) (Id.Lit_Other '\\') ('1|')
                      )
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Less val:'<' span_id:659)
                      fd: -1
                      arg_word: {(marks)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_DGreat val:'>>' span_id:662)
                      fd: -1
                      arg_word: {(packed-refs)}
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create 2,000 tags in the repo' span_id:671))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:675) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:676) (Token id:Id.Lit_Chars val:'\t\tcd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n' span_id:677) 
          (Token id:Id.Lit_Chars val:'\t\tcreate_tags 1 2000\n' span_id:678) (Token id:Id.Lit_Chars val:'\t)\n' span_id:679)
        )
      }
    )
    (C {(test_expect_success)} {(CMDLINE_LIMIT)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'clone the 2,000 tag repo to check OS command line overflow'
            span_id: 690
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:694) 
          (Token
            id: Id.Lit_Chars
            val: '\trun_with_limited_cmdline git clone $HTTPD_URL/smart/repo.git too-many-refs &&\n'
            span_id: 695
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:696) 
          (Token id:Id.Lit_Chars val:'\t\tcd too-many-refs &&\n' span_id:697) (Token id:Id.Lit_Chars val:'\t\tgit for-each-ref refs/tags >actual &&\n' span_id:698) 
          (Token id:Id.Lit_Chars val:'\t\ttest_line_count = 2000 actual\n' span_id:699) (Token id:Id.Lit_Chars val:'\t)\n' span_id:700)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'large fetch-pack requests can be split across POSTs'
            span_id: 707
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:711) 
          (Token
            id: Id.Lit_Chars
            val: '\tGIT_TRACE_CURL=true git -c http.postbuffer=65536 \\\n'
            span_id: 712
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tclone --bare "$HTTPD_URL/smart/repo.git" split.git 2>err &&\n'
            span_id: 713
          ) (Token id:Id.Lit_Chars val:'\tgrep "^=> Send header: POST" err >posts &&\n' span_id:714) 
          (Token id:Id.Lit_Chars val:'\ttest_line_count = 2 posts\n' span_id:715)
        )
      }
    )
    (C {(test_expect_success)} {(EXPENSIVE)} 
      {(SQ (Token id:Id.Lit_Chars val:'http can handle enormous ref negotiation' span_id:724))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:728) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:729) (Token id:Id.Lit_Chars val:'\t\tcd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n' span_id:730) 
          (Token id:Id.Lit_Chars val:'\t\tcreate_tags 2001 50000\n' span_id:731) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:732) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -C too-many-refs fetch -q --tags &&\n'
            span_id: 733
          ) (Token id:Id.Lit_Chars val:'\t(\n' span_id:734) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" &&\n'
            span_id: 735
          ) (Token id:Id.Lit_Chars val:'\t\tcreate_tags 50001 100000\n' span_id:736) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:737) (Token id:Id.Lit_Chars val:'\tgit -C too-many-refs fetch -q --tags &&\n' span_id:738) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -C too-many-refs for-each-ref refs/tags >tags &&\n'
            span_id: 739
          ) (Token id:Id.Lit_Chars val:'\ttest_line_count = 100000 tags\n' span_id:740)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'custom http headers' span_id:747))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:751) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git -c http.extraheader="x-magic-two: cadabra" \\\n'
            span_id: 752
          ) (Token id:Id.Lit_Chars val:'\t\tfetch "$HTTPD_URL/smart_headers/repo.git" &&\n' span_id:753) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c http.extraheader="x-magic-one: abra" \\\n'
            span_id: 754
          ) (Token id:Id.Lit_Chars val:'\t    -c http.extraheader="x-magic-two: cadabra" \\\n' span_id:755) 
          (Token
            id: Id.Lit_Chars
            val: '\t    fetch "$HTTPD_URL/smart_headers/repo.git" &&\n'
            span_id: 756
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-index --add --cacheinfo 160000,$(git rev-parse HEAD),sub &&\n'
            span_id: 757
          ) (Token id:Id.Lit_Chars val:'\tgit config -f .gitmodules submodule.sub.path sub &&\n' span_id:758) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config -f .gitmodules submodule.sub.url \\\n'
            span_id: 759
          ) (Token id:Id.Lit_Chars val:'\t\t"$HTTPD_URL/smart_headers/repo.git" &&\n' span_id:760) 
          (Token id:Id.Lit_Chars val:'\tgit submodule init sub &&\n' span_id:761) (Token id:Id.Lit_Chars val:'\ttest_must_fail git submodule update sub &&\n' span_id:762) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit -c http.extraheader="x-magic-one: abra" \\\n'
            span_id: 763
          ) (Token id:Id.Lit_Chars val:'\t    -c http.extraheader="x-magic-two: cadabra" \\\n' span_id:764) 
          (Token id:Id.Lit_Chars val:'\t\tsubmodule update sub\n' span_id:765)
        )
      }
    )
    (C {(stop_httpd)})
    (C {(test_done)})
  ]
)