(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: 
            {
              (SQ <"git checkout-index test.\n"> <"\n"> 
                <"This test registers the following filesystem structure in the cache:\n"> <"\n"> <"    path0/file0\t- a file in a directory\n"> <"    path1/file1 - a file in a directory\n"> 
                <"\n"> <"and attempts to check it out when the work tree has:\n"> <"\n"> 
                <"    path0/file0 - a file in a directory\n"> <"    path1       - a symlink pointing at \"path0\"\n"> <"\n"> 
                <"Checkout cache should fail to extract path1/file1 because the leading\n"> <"path path1 is occupied by a non-directory.  With \"-f\" it should remove\n"> 
                <"the symlink path1 and create directory path1 and file path1/file1.\n">
              )
            }
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (FuncDef
      name: show_files
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(find)} {(path) (Lit_Other "?")} {(-ls)})
                (C {(sed)} {(-e)} 
                  {
                    (SQ 
                      <
"s/^[0-9]* * [0-9]* * \\([-bcdl]\\)[^ ]* *[0-9]* *[^ ]* *[^ ]* *[0-9]* [A-Z][a-z][a-z] [0-9][0-9] [^ ]* /fs: \\1 /"
                      >
                    )
                  }
                )
              ]
              negated: False
            )
            (Pipeline
              children: [
                (C {(git)} {(ls-files)} {(--stage)})
                (C {(sed)} {(-e)} {(SQ <"s/^\\([0-9]*\\) [0-9a-f]* [0-3] /ca: \\1 /">)})
              ]
              negated: False
            )
            (Pipeline
              children: [
                (C {(git)} {(ls-tree)} {(-r)} {(DQ ($ VSub_Number "$1"))})
                (C {(sed)} {(-e)} {(SQ <"s/^\\([0-9]*\\)\t[^ ]*\t[0-9a-f]*\t/tr: \\1 /">)})
              ]
              negated: False
            )
          ]
          spids: [41]
        )
      spids: [37 40]
    )
    (C {(mkdir)} {(path0)})
    (SimpleCommand
      words: [{(date)}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(path0/file0)} spids:[123])]
    )
    (C {(test_expect_success)} {(SQ <"git update-index --add path0/file0">)} 
      {(SQ <"git update-index --add path0/file0">)}
    )
    (C {(test_expect_success)} {(SQ <"writing tree out with git write-tree">)} 
      {(SQ <"tree1=$(git write-tree)">)}
    )
    (C {(test_debug)} {(SQ <"show_files $tree1">)})
    (C {(mkdir)} {(path1)})
    (SimpleCommand
      words: [{(date)}]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(path1/file1)} spids:[167])]
    )
    (C {(test_expect_success)} {(SQ <"git update-index --add path1/file1">)} 
      {(SQ <"git update-index --add path1/file1">)}
    )
    (C {(test_expect_success)} {(SQ <"writing tree out with git write-tree">)} 
      {(SQ <"tree2=$(git write-tree)">)}
    )
    (C {(test_debug)} {(SQ <"show_files $tree2">)})
    (C {(rm)} {(-fr)} {(path1)})
    (C {(test_expect_success)} {(SQ <"read previously written tree and checkout.">)} 
      {(SQ <"git read-tree -m $tree1 && git checkout-index -f -a">)}
    )
    (C {(test_debug)} {(SQ <"show_files $tree1">)})
    (C {(test_expect_success)} {(SQ <"add a symlink">)} {(SQ <"test_ln_s_add path0 path1">)})
    (C {(test_expect_success)} {(SQ <"writing tree out with git write-tree">)} 
      {(SQ <"tree3=$(git write-tree)">)}
    )
    (C {(test_debug)} {(SQ <"show_files $tree3">)})
    (C {(test_expect_success)} {(SQ <"read previously written tree and checkout.">)} 
      {(SQ <"git read-tree $tree2 && git checkout-index -f -a">)}
    )
    (C {(test_debug)} {(SQ <"show_files $tree2">)})
    (C {(test_expect_success)} {(SQ <"checking out conflicting path with -f">)} 
      {
        (SQ <"test ! -h path0 && test -d path0 &&\n"> <"     test ! -h path1 && test -d path1 &&\n"> 
          <"     test ! -h path0/file0 && test -f path0/file0 &&\n"> <"     test ! -h path1/file1 && test -f path1/file1">
        )
      }
    )
    (C {(test_done)})
  ]
)