(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 git-http-backend-noserver' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HTTPD_DOCUMENT_ROOT_PATH)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_DollarName '$TRASH_DIRECTORY'))}
          spids: [14]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [(C {(test_have_prereq)} {(GREP_STRIPS_CR)})]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GREP_OPTIONS)
                  op: assign_op.Equal
                  rhs: {(-U)}
                  spids: [29]
                )
              ]
            )
            (C {(export)} {(GREP_OPTIONS)})
          ]
          spids: [20 26]
        )
      ]
    )
    (command.ShFunction
      name: run_backend
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(echo)} {(DQ ($ Id.VSub_Number '$2'))})
                (command.Simple
                  words: [{(git)} {(http-backend)}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:84)
                      fd: -1
                      arg_word: {(act.out)}
                    )
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'2>' span_id:87)
                      fd: 2
                      arg_word: {(act.err)}
                    )
                  ]
                  more_env: [
                    (env_pair
                      name: QUERY_STRING
                      val: 
                        {
                          (DQ 
                            (braced_var_sub
                              token: (Token id:Id.VSub_Number val:1 span_id:59)
                              suffix_op: (suffix_op.Unary op_id:Id.VOp1_Pound arg_word:{('*[?]')})
                            )
                          )
                        }
                      spids: [56]
                    )
                    (env_pair
                      name: PATH_TRANSLATED
                      val: 
                        {
                          (DQ ($ Id.VSub_DollarName '$HTTPD_DOCUMENT_ROOT_PATH') (/) 
                            (braced_var_sub
                              token: (Token id:Id.VSub_Number val:1 span_id:72)
                              suffix_op: (suffix_op.Unary op_id:Id.VOp1_DPercent arg_word:{('[?]*')})
                            )
                          )
                        }
                      spids: [67]
                    )
                  ]
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: GET
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:REQUEST_METHOD)
                      op: assign_op.Equal
                      rhs: {(DQ (GET))}
                      spids: [100]
                    )
                  ]
                )
                (C {(export)} {(REQUEST_METHOD)})
                (C {(run_backend)} {(DQ (/repo.git/) ($ Id.VSub_Number '$1'))})
                (C {(sane_unset)} {(REQUEST_METHOD)})
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Pipeline
                          children: [
                            (command.Simple
                              words: [{(grep)} {(DQ (Status))} {(act.out)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:143)
                                  fd: -1
                                  arg_word: {(act)}
                                )
                              ]
                            )
                          ]
                          negated: T
                        )
                      ]
                      action: [
                        (command.Simple
                          words: [
                            {(printf)}
                            {(DQ ('Status: 200 OK') (Id.Lit_Other '\\') (r) (Id.Lit_Other '\\') (n))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:160)
                              fd: -1
                              arg_word: {(act)}
                            )
                          ]
                        )
                      ]
                      spids: [131 147]
                    )
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(printf)}
                    {
                      (DQ ('Status: ') ($ Id.VSub_Number '$2') (Id.Lit_Other '\\') (r) 
                        (Id.Lit_Other '\\') (n)
                      )
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:178)
                      fd: -1
                      arg_word: {(exp)}
                    )
                  ]
                )
                (C {(test_cmp)} {(exp)} {(act)})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: POST
      body: 
        (command.BraceGroup
          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]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:REQUEST_METHOD)
                      op: assign_op.Equal
                      rhs: {(DQ (POST))}
                      spids: [200]
                    )
                  ]
                )
                (C {(export)} {(REQUEST_METHOD)})
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:CONTENT_TYPE)
                      op: assign_op.Equal
                      rhs: {(DQ (application/x-) ($ Id.VSub_Number '$1') (-request))}
                      spids: [214]
                    )
                  ]
                )
                (C {(export)} {(CONTENT_TYPE)})
                (C {(run_backend)} {(DQ (/repo.git/) ($ Id.VSub_Number '$1'))} 
                  {(DQ ($ Id.VSub_Number '$2'))}
                )
                (C {(sane_unset)} {(REQUEST_METHOD)})
                (C {(sane_unset)} {(CONTENT_TYPE)})
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Pipeline
                          children: [
                            (command.Simple
                              words: [{(grep)} {(DQ (Status))} {(act.out)}]
                              redirects: [
                                (redir.Redir
                                  op: (Token id:Id.Redir_Great val:'>' span_id:270)
                                  fd: -1
                                  arg_word: {(act)}
                                )
                              ]
                            )
                          ]
                          negated: T
                        )
                      ]
                      action: [
                        (command.Simple
                          words: [
                            {(printf)}
                            {(DQ ('Status: 200 OK') (Id.Lit_Other '\\') (r) (Id.Lit_Other '\\') (n))}
                          ]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:287)
                              fd: -1
                              arg_word: {(act)}
                            )
                          ]
                        )
                      ]
                      spids: [258 274]
                    )
                  ]
                )
              ]
            )
            (command.AndOr
              ops: [Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(printf)}
                    {
                      (DQ ('Status: ') ($ Id.VSub_Number '$3') (Id.Lit_Other '\\') (r) 
                        (Id.Lit_Other '\\') (n)
                      )
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:305)
                      fd: -1
                      arg_word: {(exp)}
                    )
                  ]
                )
                (C {(test_cmp)} {(exp)} {(act)})
              ]
            )
          ]
        )
    )
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/t556x_common)})
    (command.ShFunction
      name: expect_aliased
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:REQUEST_METHOD)
                      op: assign_op.Equal
                      rhs: {(DQ (GET))}
                      spids: [335]
                    )
                  ]
                )
                (C {(export)} {(REQUEST_METHOD)})
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: (C {(test)} {($ Id.VSub_Number '$1')} {(Id.Lit_Equals '=')} {(0)})
                          terminator: (Token id:Id.Op_Semi val:';' span_id:358)
                        )
                      ]
                      action: [(C {(run_backend)} {(DQ ($ Id.VSub_Number '$2'))})]
                      spids: [349 360]
                    )
                  ]
                  else_action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp Id.Op_DAmp]
                      children: [
                        (C {(run_backend)} {(DQ ($ Id.VSub_Number '$2'))})
                        (command.Simple
                          words: [{(echo)} {(DQ ("fatal: '") ($ Id.VSub_Number '$2') ("': aliased"))}]
                          redirects: [
                            (redir.Redir
                              op: (Token id:Id.Redir_Great val:'>' span_id:390)
                              fd: -1
                              arg_word: {(exp.err)}
                            )
                          ]
                        )
                        (C {(test_cmp)} {(exp.err)} {(act.err)})
                      ]
                    )
                  ]
                )
              ]
            )
            (C {(unset)} {(REQUEST_METHOD)})
          ]
        )
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'http-backend blocks bad PATH_INFO' span_id:416))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:420) 
          (Token id:Id.Lit_Chars val:'\tconfig http.getanyfile true &&\n' span_id:421) (Token id:Id.Lit_Chars val:'\n' span_id:422) 
          (Token id:Id.Lit_Chars val:'\texpect_aliased 0 /repo.git/HEAD &&\n' span_id:423) (Token id:Id.Lit_Chars val:'\n' span_id:424) 
          (Token
            id: Id.Lit_Chars
            val: '\texpect_aliased 1 /repo.git/../HEAD &&\n'
            span_id: 425
          ) (Token id:Id.Lit_Chars val:'\texpect_aliased 1 /../etc/passwd &&\n' span_id:426) 
          (Token id:Id.Lit_Chars val:'\texpect_aliased 1 ../etc/passwd &&\n' span_id:427) (Token id:Id.Lit_Chars val:'\texpect_aliased 1 /etc//passwd &&\n' span_id:428) 
          (Token id:Id.Lit_Chars val:'\texpect_aliased 1 /etc/./passwd &&\n' span_id:429) (Token id:Id.Lit_Chars val:'\texpect_aliased 1 //domain/data.txt\n' span_id:430)
        )
      }
    )
    (C {(test_done)})
  ]
)