(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:test_description spids:[21])
          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: [21]
        )
      ]
      spids: [21]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.FuncDef
      name: show_files
      body: 
        (command.BraceGroup
          children: [
            (command.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: 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 ($ VSub_Number '$1'))})
                (C {(sed)} {(-e)} {(SQ <'s/^\\([0-9]*\\)\t[^ ]*\t[0-9a-f]*\t/tr: \\1 /'>)})
              ]
              negated: F
            )
          ]
          spids: [49]
        )
      spids: [45 48]
    )
    (C {(mkdir)} {(path0)})
    (command.SimpleCommand
      words: [{(date)}]
      redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(path0/file0)})]
    )
    (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.SimpleCommand
      words: [{(date)}]
      redirects: [(redir.Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(path1/file1)})]
    )
    (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)})
  ]
)