(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git apply should not get confused with type changes.\n'> <'\n'>)}
        )
      ]
    )
    (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)})
  ]
)