(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"checkout must not overwrite an untracked objects">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <"\n"> <"\n"> <"\tmkdir -p a/b/c &&\n"> <"\t>a/b/c/d &&\n"> <"\tgit add -A &&\n"> 
          <"\tgit commit -m base &&\n"> <"\tgit tag start\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"create a commit where dir a/b changed to file">)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit checkout -b file &&\n"> <"\trm -rf a/b &&\n"> <"\t>a/b &&\n"> 
          <"\tgit add -A &&\n"> <"\tgit commit -m \"dir to file\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"checkout commit with dir must not remove untracked a/b">)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit rm --cached a/b &&\n"> <"\tgit commit -m \"un-track the file\" &&\n"> 
          <"\ttest_must_fail git checkout start &&\n"> <"\ttest -f a/b\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"create a commit where dir a/b changed to symlink">)} 
      {
        (SQ <"\n"> <"\n"> <"\trm -rf a/b &&\t# cleanup if previous test failed\n"> 
          <"\tgit checkout -f -b symlink start &&\n"> <"\trm -rf a/b &&\n"> <"\tgit add -A &&\n"> <"\ttest_ln_s_add foo a/b &&\n"> 
          <"\tgit commit -m \"dir to symlink\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"checkout commit with dir must not remove untracked a/b">)} 
      {
        (SQ <"\n"> <"\n"> <"\tgit rm --cached a/b &&\n"> 
          <"\tgit commit -m \"un-track the symlink\" &&\n"> <"\ttest_must_fail git checkout start\n">
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} {(SQ <"the symlink remained">)} 
      {(SQ <"\n"> <"\n"> <"\ttest -h a/b\n">)}
    )
    (C {(test_done)})
  ]
)