(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"check that read-tree rejects confusing paths">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <"create base tree">)} 
      {
        (SQ <"\n"> <"\techo content >file &&\n"> <"\tgit add file &&\n"> <"\tgit commit -m base &&\n"> 
          <"\tblob=$(git rev-parse HEAD:file) &&\n"> <"\ttree=$(git rev-parse HEAD^{tree})\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"enable core.protectHFS for rejection tests">)} 
      {(SQ <"\n"> <"\tgit config core.protectHFS true\n">)}
    )
    (C {(test_expect_success)} {(SQ <"enable core.protectNTFS for rejection tests">)} 
      {(SQ <"\n"> <"\tgit config core.protectNTFS true\n">)}
    )
    (While
      cond: [(Sentence child:(C {(read)} {(path)} {(pretty)}) terminator:<Op_Semi ";">)]
      body: 
        (DoGroup
          children: [
            (C {(Lit_Other ":")} 
              {
                (BracedVarSub
                  token: <VSub_Name pretty>
                  suffix_op: (StringUnary op_id:VTest_ColonEquals arg_word:{($ VSub_Name "$path")})
                  spids: [68 72]
                )
              }
            )
            (Case
              to_match: {(DQ ($ VSub_Name "$path"))}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other "*") (SPACE)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:path)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name path>
                                  suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(SPACE)})
                                  spids: [91 95]
                                ) (" ")
                              )
                            }
                          spids: [89]
                        )
                      ]
                      spids: [89]
                    )
                  ]
                  spids: [84 86 100 -1]
                )
              ]
              spids: [75 81 103]
            )
            (C {(test_expect_success)} {(DQ ("reject ") ($ VSub_Name "$pretty") (" at end of path"))} 
              {
                (SQ <"\n"> <"\t\tprintf \"100644 blob %s\\t%s\" \"$blob\" \"$path\" >tree &&\n"> 
                  <"\t\tbogus=$(git mktree <tree) &&\n"> <"\t\ttest_must_fail git read-tree $bogus\n"> <"\t">
                )
              }
            )
            (C {(test_expect_success)} {(DQ ("reject ") ($ VSub_Name "$pretty") (" as subtree"))} 
              {
                (SQ <"\n"> <"\t\tprintf \"040000 tree %s\\t%s\" \"$tree\" \"$path\" >tree &&\n"> 
                  <"\t\tbogus=$(git mktree <tree) &&\n"> <"\t\ttest_must_fail git read-tree $bogus\n"> <"\t">
                )
              }
            )
          ]
          spids: [63 140]
        )
      redirects: [
        (HereDoc
          op_id: Redir_DLessDash
          fd: -1
          body: 
            {
              (DQ (".\n") ("..\n") (".git\n") (".GIT\n") (${ VSub_Name u200c) (".Git {u200c}.Git\n") (.gI) 
                (${ VSub_Name u200c) ("T .gI{u200c}T\n") (.GiT) (${ VSub_Name u200c) (" .GiT{u200c}\n") ("git~1\n") 
                (".git.SPACE .git.{space}\n") (.) (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) (.GIT) (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) ("foobar backslashes\n") (.git) (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) 
                (EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) ("foobar backslashes2\n")
              )
            }
          do_expansion: True
          here_end: EOF
          was_filled: True
          spids: [142]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ <"utf-8 paths allowed with core.protectHFS off">)} 
      {
        (SQ <"\n"> <"\ttest_when_finished \"git read-tree HEAD\" &&\n"> 
          <"\ttest_config core.protectHFS false &&\n"> <"\tprintf \"100644 blob %s\\t%s\" \"$blob\" \".gi${u200c}t\" >tree &&\n"> 
          <"\tok=$(git mktree <tree) &&\n"> <"\tgit read-tree $ok\n">
        )
      }
    )
    (C {(test_done)})
  ]
)