(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description spids:[4])
          op: Equal
          rhs: {(SQ <'test git-http-backend-noserver'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:HTTPD_DOCUMENT_ROOT_PATH spids:[14])
          op: Equal
          rhs: {(DQ ($ VSub_Name '$TRASH_DIRECTORY'))}
          spids: [14]
        )
      ]
      spids: [14]
    )
    (If
      arms: [
        (if_arm
          cond: [(C {(test_have_prereq)} {(GREP_STRIPS_CR)})]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:GREP_OPTIONS spids:[29])
                  op: Equal
                  rhs: {(-U)}
                  spids: [29]
                )
              ]
              spids: [29]
            )
            (C {(export)} {(GREP_OPTIONS)})
          ]
          spids: [16777215 26]
        )
      ]
      spids: [16777215 37]
    )
    (FuncDef
      name: run_backend
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(echo)} {(DQ ($ VSub_Number '$2'))})
                (SimpleCommand
                  words: [{(git)} {(http-backend)}]
                  redirects: [
                    (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(act.out)})
                    (Redir op:<Redir_Great '2>'> fd:2 arg_word:{(act.err)})
                  ]
                  more_env: [
                    (env_pair
                      name: QUERY_STRING
                      val: 
                        {
                          (DQ 
                            (BracedVarSub
                              token: <VSub_Number 1>
                              suffix_op: (StringUnary op_id:VOp1_Pound arg_word:{('*[?]')})
                              spids: [58 62]
                            )
                          )
                        }
                      spids: [56]
                    )
                    (env_pair
                      name: PATH_TRANSLATED
                      val: 
                        {
                          (DQ ($ VSub_Name '$HTTPD_DOCUMENT_ROOT_PATH') (/) 
                            (BracedVarSub
                              token: <VSub_Number 1>
                              suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{('[?]*')})
                              spids: [71 75]
                            )
                          )
                        }
                      spids: [67]
                    )
                  ]
                )
              ]
              negated: F
            )
          ]
          spids: [44]
        )
      spids: [40 43]
    )
    (FuncDef
      name: GET
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:REQUEST_METHOD spids:[100])
                      op: Equal
                      rhs: {(DQ (GET))}
                      spids: [100]
                    )
                  ]
                  spids: [100]
                )
                (C {(export)} {(REQUEST_METHOD)})
                (C {(run_backend)} {(DQ (/repo.git/) ($ VSub_Number '$1'))})
                (C {(sane_unset)} {(REQUEST_METHOD)})
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(grep)} {(DQ (Status))} {(act.out)}]
                              redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(act)})]
                            )
                          ]
                          negated: T
                        )
                      ]
                      action: [
                        (SimpleCommand
                          words: [
                            {(printf)}
                            {(DQ ('Status: 200 OK') (Lit_Other '\\') (r) (Lit_Other '\\') (n))}
                          ]
                          redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(act)})]
                        )
                      ]
                      spids: [16777215 147]
                    )
                  ]
                  spids: [16777215 164]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (SimpleCommand
                  words: [
                    {(printf)}
                    {
                      (DQ ('Status: ') ($ VSub_Number '$2') (Lit_Other '\\') (r) (Lit_Other '\\') (n))
                    }
                  ]
                  redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(exp)})]
                )
                (C {(test_cmp)} {(exp)} {(act)})
              ]
            )
          ]
          spids: [97]
        )
      spids: [93 96]
    )
    (FuncDef
      name: POST
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp Op_DAmp]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:REQUEST_METHOD spids:[200])
                      op: Equal
                      rhs: {(DQ (POST))}
                      spids: [200]
                    )
                  ]
                  spids: [200]
                )
                (C {(export)} {(REQUEST_METHOD)})
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:CONTENT_TYPE spids:[214])
                      op: Equal
                      rhs: {(DQ (application/x-) ($ VSub_Number '$1') (-request))}
                      spids: [214]
                    )
                  ]
                  spids: [214]
                )
                (C {(export)} {(CONTENT_TYPE)})
                (C {(run_backend)} {(DQ (/repo.git/) ($ VSub_Number '$1'))} {(DQ ($ VSub_Number '$2'))})
                (C {(sane_unset)} {(REQUEST_METHOD)})
                (C {(sane_unset)} {(CONTENT_TYPE)})
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{(grep)} {(DQ (Status))} {(act.out)}]
                              redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(act)})]
                            )
                          ]
                          negated: T
                        )
                      ]
                      action: [
                        (SimpleCommand
                          words: [
                            {(printf)}
                            {(DQ ('Status: 200 OK') (Lit_Other '\\') (r) (Lit_Other '\\') (n))}
                          ]
                          redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(act)})]
                        )
                      ]
                      spids: [16777215 274]
                    )
                  ]
                  spids: [16777215 291]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (SimpleCommand
                  words: [
                    {(printf)}
                    {
                      (DQ ('Status: ') ($ VSub_Number '$3') (Lit_Other '\\') (r) (Lit_Other '\\') (n))
                    }
                  ]
                  redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(exp)})]
                )
                (C {(test_cmp)} {(exp)} {(act)})
              ]
            )
          ]
          spids: [197]
        )
      spids: [193 196]
    )
    (C {(.)} {(DQ ($ VSub_Name '$TEST_DIRECTORY')) (/t556x_common)})
    (FuncDef
      name: expect_aliased
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DAmp Op_DAmp]
              children: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:REQUEST_METHOD spids:[335])
                      op: Equal
                      rhs: {(DQ (GET))}
                      spids: [335]
                    )
                  ]
                  spids: [335]
                )
                (C {(export)} {(REQUEST_METHOD)})
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: (C {(test)} {($ VSub_Number '$1')} {(Lit_Other '=')} {(0)})
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [(C {(run_backend)} {(DQ ($ VSub_Number '$2'))})]
                      spids: [16777215 360]
                    )
                  ]
                  else_action: [
                    (AndOr
                      ops: [Op_DAmp Op_DAmp]
                      children: [
                        (C {(run_backend)} {(DQ ($ VSub_Number '$2'))})
                        (SimpleCommand
                          words: [{(echo)} {(DQ ("fatal: '") ($ VSub_Number '$2') ("': aliased"))}]
                          redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(exp.err)})]
                        )
                        (C {(test_cmp)} {(exp.err)} {(act.err)})
                      ]
                    )
                  ]
                  spids: [370 403]
                )
              ]
            )
            (C {(unset)} {(REQUEST_METHOD)})
          ]
          spids: [332]
        )
      spids: [328 331]
    )
    (C {(test_expect_success)} {(SQ <'http-backend blocks bad PATH_INFO'>)} 
      {
        (SQ <'\n'> <'\tconfig http.getanyfile true &&\n'> <'\n'> 
          <'\texpect_aliased 0 /repo.git/HEAD &&\n'> <'\n'> <'\texpect_aliased 1 /repo.git/../HEAD &&\n'> <'\texpect_aliased 1 /../etc/passwd &&\n'> 
          <'\texpect_aliased 1 ../etc/passwd &&\n'> <'\texpect_aliased 1 /etc//passwd &&\n'> <'\texpect_aliased 1 /etc/./passwd &&\n'> 
          <'\texpect_aliased 1 //domain/data.txt\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)