(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git apply should not get confused with type changes.\n"> <"\n">)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <"setup repository and commits">)} 
      {
        (SQ <"\n"> <"\techo \"hello world\" > foo &&\n"> <"\techo \"hi planet\" > bar &&\n"> 
          <"\tgit update-index --add foo bar &&\n"> <"\tgit commit -m initial &&\n"> <"\tgit branch initial &&\n"> <"\trm -f foo &&\n"> 
          <"\ttest_ln_s_add bar foo &&\n"> <"\tgit commit -m \"foo symlinked to bar\" &&\n"> <"\tgit branch foo-symlinked-to-bar &&\n"> 
          <"\tgit rm -f foo &&\n"> <"\techo \"how far is the sun?\" > foo &&\n"> <"\tgit update-index --add foo &&\n"> 
          <"\tgit commit -m \"foo back to file\" &&\n"> <"\tgit branch foo-back-to-file &&\n"> <"\tprintf \"\\0\" > foo &&\n"> <"\tgit update-index foo &&\n"> 
          <"\tgit commit -m \"foo becomes binary\" &&\n"> <"\tgit branch foo-becomes-binary &&\n"> <"\trm -f foo &&\n"> <"\tgit update-index --remove foo &&\n"> 
          <"\tmkdir foo &&\n"> <"\techo \"if only I knew\" > foo/baz &&\n"> <"\tgit update-index --add foo/baz &&\n"> 
          <"\tgit commit -m \"foo becomes a directory\" &&\n"> <"\tgit branch \"foo-becomes-a-directory\" &&\n"> <"\techo \"hello world\" > foo/baz &&\n"> 
          <"\tgit update-index foo/baz &&\n"> <"\tgit commit -m \"foo/baz is the original foo\" &&\n"> <"\tgit branch foo-baz-renamed-from-foo\n"> 
          <"\t">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"file renamed from foo to foo/baz">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f initial &&\n"> 
          <"\tgit diff-tree -M -p HEAD foo-baz-renamed-from-foo > patch &&\n"> <"\tgit apply --index < patch\n"> <"\t">
        )
      }
    )
    (C {(test_debug)} {(SQ <"cat patch">)})
    (C {(test_expect_success)} {(SQ <"file renamed from foo/baz to foo">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f foo-baz-renamed-from-foo &&\n"> 
          <"\tgit diff-tree -M -p HEAD initial > patch &&\n"> <"\tgit apply --index < patch\n"> <"\t">
        )
      }
    )
    (C {(test_debug)} {(SQ <"cat patch">)})
    (C {(test_expect_success)} {(SQ <"directory becomes file">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f foo-becomes-a-directory &&\n"> 
          <"\tgit diff-tree -p HEAD initial > patch &&\n"> <"\tgit apply --index < patch\n"> <"\t">
        )
      }
    )
    (C {(test_debug)} {(SQ <"cat patch">)})
    (C {(test_expect_success)} {(SQ <"file becomes directory">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f initial &&\n"> 
          <"\tgit diff-tree -p HEAD foo-becomes-a-directory > patch &&\n"> <"\tgit apply --index < patch\n"> <"\t">
        )
      }
    )
    (C {(test_debug)} {(SQ <"cat patch">)})
    (C {(test_expect_success)} {(SQ <"file becomes symlink">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f initial &&\n"> 
          <"\tgit diff-tree -p HEAD foo-symlinked-to-bar > patch &&\n"> <"\tgit apply --index < patch\n"> <"\t">
        )
      }
    )
    (C {(test_debug)} {(SQ <"cat patch">)})
    (C {(test_expect_success)} {(SQ <"symlink becomes file">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f foo-symlinked-to-bar &&\n"> 
          <"\tgit diff-tree -p HEAD foo-back-to-file > patch &&\n"> <"\tgit apply --index < patch\n"> <"\t">
        )
      }
    )
    (C {(test_debug)} {(SQ <"cat patch">)})
    (C {(test_expect_success)} {(SQ <"binary file becomes symlink">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f foo-becomes-binary &&\n"> 
          <"\tgit diff-tree -p --binary HEAD foo-symlinked-to-bar > patch &&\n"> <"\tgit apply --index < patch\n"> <"\t">
        )
      }
    )
    (C {(test_debug)} {(SQ <"cat patch">)})
    (C {(test_expect_success)} {(SQ <"symlink becomes binary file">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f foo-symlinked-to-bar &&\n"> 
          <"\tgit diff-tree -p --binary HEAD foo-becomes-binary > patch &&\n"> <"\tgit apply --index < patch\n"> <"\t">
        )
      }
    )
    (C {(test_debug)} {(SQ <"cat patch">)})
    (C {(test_expect_success)} {(SQ <"symlink becomes directory">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f foo-symlinked-to-bar &&\n"> 
          <"\tgit diff-tree -p HEAD foo-becomes-a-directory > patch &&\n"> <"\tgit apply --index < patch\n"> <"\t">
        )
      }
    )
    (C {(test_debug)} {(SQ <"cat patch">)})
    (C {(test_expect_success)} {(SQ <"directory becomes symlink">)} 
      {
        (SQ <"\n"> <"\tgit checkout -f foo-becomes-a-directory &&\n"> 
          <"\tgit diff-tree -p HEAD foo-symlinked-to-bar > patch &&\n"> <"\tgit apply --index < patch\n"> <"\t">
        )
      }
    )
    (C {(test_debug)} {(SQ <"cat patch">)})
    (C {(test_done)})
  ]
)