Merge branch 'ab/submodule-add-f'
[git] / t / t4114-apply-typechange.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2006 Eric Wong
4 #
5
6 test_description='git apply should not get confused with type changes.
7
8 '
9
10 . ./test-lib.sh
11
12 if ! test_have_prereq SYMLINKS
13 then
14         skip_all='Symbolic links not supported, skipping tests.'
15         test_done
16 fi
17
18 test_expect_success 'setup repository and commits' '
19         echo "hello world" > foo &&
20         echo "hi planet" > bar &&
21         git update-index --add foo bar &&
22         git commit -m initial &&
23         git branch initial &&
24         rm -f foo &&
25         ln -s bar foo &&
26         git update-index foo &&
27         git commit -m "foo symlinked to bar" &&
28         git branch foo-symlinked-to-bar &&
29         rm -f foo &&
30         echo "how far is the sun?" > foo &&
31         git update-index foo &&
32         git commit -m "foo back to file" &&
33         git branch foo-back-to-file &&
34         printf "\0" > foo &&
35         git update-index foo &&
36         git commit -m "foo becomes binary" &&
37         git branch foo-becomes-binary &&
38         rm -f foo &&
39         git update-index --remove foo &&
40         mkdir foo &&
41         echo "if only I knew" > foo/baz &&
42         git update-index --add foo/baz &&
43         git commit -m "foo becomes a directory" &&
44         git branch "foo-becomes-a-directory" &&
45         echo "hello world" > foo/baz &&
46         git update-index foo/baz &&
47         git commit -m "foo/baz is the original foo" &&
48         git branch foo-baz-renamed-from-foo
49         '
50
51 test_expect_success 'file renamed from foo to foo/baz' '
52         git checkout -f initial &&
53         git diff-tree -M -p HEAD foo-baz-renamed-from-foo > patch &&
54         git apply --index < patch
55         '
56 test_debug 'cat patch'
57
58
59 test_expect_success 'file renamed from foo/baz to foo' '
60         git checkout -f foo-baz-renamed-from-foo &&
61         git diff-tree -M -p HEAD initial > patch &&
62         git apply --index < patch
63         '
64 test_debug 'cat patch'
65
66
67 test_expect_success 'directory becomes file' '
68         git checkout -f foo-becomes-a-directory &&
69         git diff-tree -p HEAD initial > patch &&
70         git apply --index < patch
71         '
72 test_debug 'cat patch'
73
74
75 test_expect_success 'file becomes directory' '
76         git checkout -f initial &&
77         git diff-tree -p HEAD foo-becomes-a-directory > patch &&
78         git apply --index < patch
79         '
80 test_debug 'cat patch'
81
82
83 test_expect_success 'file becomes symlink' '
84         git checkout -f initial &&
85         git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
86         git apply --index < patch
87         '
88 test_debug 'cat patch'
89
90
91 test_expect_success 'symlink becomes file' '
92         git checkout -f foo-symlinked-to-bar &&
93         git diff-tree -p HEAD foo-back-to-file > patch &&
94         git apply --index < patch
95         '
96 test_debug 'cat patch'
97
98 test_expect_success 'binary file becomes symlink' '
99         git checkout -f foo-becomes-binary &&
100         git diff-tree -p --binary HEAD foo-symlinked-to-bar > patch &&
101         git apply --index < patch
102         '
103 test_debug 'cat patch'
104
105 test_expect_success 'symlink becomes binary file' '
106         git checkout -f foo-symlinked-to-bar &&
107         git diff-tree -p --binary HEAD foo-becomes-binary > patch &&
108         git apply --index < patch
109         '
110 test_debug 'cat patch'
111
112
113 test_expect_success 'symlink becomes directory' '
114         git checkout -f foo-symlinked-to-bar &&
115         git diff-tree -p HEAD foo-becomes-a-directory > patch &&
116         git apply --index < patch
117         '
118 test_debug 'cat patch'
119
120
121 test_expect_success 'directory becomes symlink' '
122         git checkout -f foo-becomes-a-directory &&
123         git diff-tree -p HEAD foo-symlinked-to-bar > patch &&
124         git apply --index < patch
125         '
126 test_debug 'cat patch'
127
128
129 test_done