#!/bin/sh # # Copyright (c) 2006 Eric Wong # global test_description := ''git apply should not get confused with type changes. '' source ./test-lib.sh test_expect_success 'setup repository and commits' ' echo "hello world" > foo && echo "hi planet" > bar && git update-index --add foo bar && git commit -m initial && git branch initial && rm -f foo && test_ln_s_add bar foo && git commit -m "foo symlinked to bar" && git branch foo-symlinked-to-bar && git rm -f foo && echo "how far is the sun?" > foo && git update-index --add foo && git commit -m "foo back to file" && git branch foo-back-to-file && printf "\0" > foo && git update-index foo && git commit -m "foo becomes binary" && git branch foo-becomes-binary && rm -f foo && git update-index --remove foo && mkdir foo && echo "if only I knew" > foo/baz && git update-index --add foo/baz && git commit -m "foo becomes a directory" && git branch "foo-becomes-a-directory" && echo "hello world" > foo/baz && git update-index foo/baz && git commit -m "foo/baz is the original foo" && git branch foo-baz-renamed-from-foo ' test_expect_success 'file renamed from foo to foo/baz' ' git checkout -f initial && git diff-tree -M -p HEAD foo-baz-renamed-from-foo > patch && git apply --index < patch ' test_debug 'cat patch' test_expect_success 'file renamed from foo/baz to foo' ' git checkout -f foo-baz-renamed-from-foo && git diff-tree -M -p HEAD initial > patch && git apply --index < patch ' test_debug 'cat patch' test_expect_success 'directory becomes file' ' git checkout -f foo-becomes-a-directory && git diff-tree -p HEAD initial > patch && git apply --index < patch ' test_debug 'cat patch' test_expect_success 'file becomes directory' ' git checkout -f initial && git diff-tree -p HEAD foo-becomes-a-directory > patch && git apply --index < patch ' test_debug 'cat patch' test_expect_success 'file becomes symlink' ' git checkout -f initial && git diff-tree -p HEAD foo-symlinked-to-bar > patch && git apply --index < patch ' test_debug 'cat patch' test_expect_success 'symlink becomes file' ' git checkout -f foo-symlinked-to-bar && git diff-tree -p HEAD foo-back-to-file > patch && git apply --index < patch ' test_debug 'cat patch' test_expect_success 'binary file becomes symlink' ' git checkout -f foo-becomes-binary && git diff-tree -p --binary HEAD foo-symlinked-to-bar > patch && git apply --index < patch ' test_debug 'cat patch' test_expect_success 'symlink becomes binary file' ' git checkout -f foo-symlinked-to-bar && git diff-tree -p --binary HEAD foo-becomes-binary > patch && git apply --index < patch ' test_debug 'cat patch' test_expect_success 'symlink becomes directory' ' git checkout -f foo-symlinked-to-bar && git diff-tree -p HEAD foo-becomes-a-directory > patch && git apply --index < patch ' test_debug 'cat patch' test_expect_success 'directory becomes symlink' ' git checkout -f foo-becomes-a-directory && git diff-tree -p HEAD foo-symlinked-to-bar > patch && git apply --index < patch ' test_debug 'cat patch' test_done (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)}) ] )