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