(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:test_description)
          op: assign_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]
        )
      ]
    )
    (C {<.>} {<'./test-lib.sh'>})
    (command.ShFunction
      name: show_files
      body: 
        (BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {<find>} {<path> <Id.Lit_QMark '?'>} {<-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: F
            )
            (command.Pipeline
              children: [
                (C {<git>} {<ls-files>} {<--stage>})
                (C {<sed>} {<-e>} {(SQ <'s/^\\([0-9]*\\) [0-9a-f]* [0-3] /ca: \\1 /'>)})
              ]
              negated: F
            )
            (command.Pipeline
              children: [
                (C {<git>} {<ls-tree>} {<-r>} {(DQ ($ Id.VSub_Number '$1'))})
                (C {<sed>} {<-e>} {(SQ <'s/^\\([0-9]*\\)\t[^ ]*\t[0-9a-f]*\t/tr: \\1 /'>)})
              ]
              negated: F
            )
          ]
        )
    )
    (C {<mkdir>} {<path0>})
    (command.Simple
      words: [{<date>}]
      redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'path0/file0'>})]
      do_fork: T
    )
    (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>})
    (command.Simple
      words: [{<date>}]
      redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<'path1/file1'>})]
      do_fork: T
    )
    (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>})
  ]
)