]>
Commit | Line | Data |
---|---|---|
7bb1fcc6 CB |
1 | #!/bin/sh |
2 | ||
3 | test_description='git-merge | |
4 | ||
5 | Do not overwrite changes.' | |
6 | ||
7 | . ./test-lib.sh | |
8 | ||
9 | test_expect_success 'setup' ' | |
52a0a1bd CB |
10 | test_commit c0 c0.c && |
11 | test_commit c1 c1.c && | |
12 | test_commit c1a c1.c "c1 a" && | |
7bb1fcc6 | 13 | git reset --hard c0 && |
52a0a1bd | 14 | test_commit c2 c2.c && |
189645ca CB |
15 | git reset --hard c0 && |
16 | mkdir sub && | |
17 | echo "sub/f" > sub/f && | |
7980872d CB |
18 | mkdir sub2 && |
19 | echo "sub2/f" > sub2/f && | |
20 | git add sub/f sub2/f && | |
189645ca CB |
21 | git commit -m sub && |
22 | git tag sub && | |
7bb1fcc6 CB |
23 | echo "VERY IMPORTANT CHANGES" > important |
24 | ' | |
25 | ||
26 | test_expect_success 'will not overwrite untracked file' ' | |
27 | git reset --hard c1 && | |
52a0a1bd | 28 | cp important c2.c && |
ce14e0b2 | 29 | test_must_fail git merge c2 && |
52a0a1bd | 30 | test_path_is_missing .git/MERGE_HEAD && |
7bb1fcc6 CB |
31 | test_cmp important c2.c |
32 | ' | |
33 | ||
189645ca CB |
34 | test_expect_success 'will overwrite tracked file' ' |
35 | git reset --hard c1 && | |
36 | cp important c2.c && | |
37 | git add c2.c && | |
38 | git commit -m important && | |
39 | git checkout c2 | |
40 | ' | |
41 | ||
7bb1fcc6 CB |
42 | test_expect_success 'will not overwrite new file' ' |
43 | git reset --hard c1 && | |
52a0a1bd | 44 | cp important c2.c && |
7bb1fcc6 | 45 | git add c2.c && |
ce14e0b2 | 46 | test_must_fail git merge c2 && |
52a0a1bd | 47 | test_path_is_missing .git/MERGE_HEAD && |
7bb1fcc6 CB |
48 | test_cmp important c2.c |
49 | ' | |
50 | ||
51 | test_expect_success 'will not overwrite staged changes' ' | |
52 | git reset --hard c1 && | |
52a0a1bd | 53 | cp important c2.c && |
7bb1fcc6 CB |
54 | git add c2.c && |
55 | rm c2.c && | |
ce14e0b2 | 56 | test_must_fail git merge c2 && |
52a0a1bd | 57 | test_path_is_missing .git/MERGE_HEAD && |
7bb1fcc6 CB |
58 | git checkout c2.c && |
59 | test_cmp important c2.c | |
60 | ' | |
61 | ||
c5ab03f2 | 62 | test_expect_success 'will not overwrite removed file' ' |
7bb1fcc6 CB |
63 | git reset --hard c1 && |
64 | git rm c1.c && | |
65 | git commit -m "rm c1.c" && | |
52a0a1bd | 66 | cp important c1.c && |
ce14e0b2 | 67 | test_must_fail git merge c1a && |
7bb1fcc6 CB |
68 | test_cmp important c1.c |
69 | ' | |
70 | ||
71 | test_expect_success 'will not overwrite re-added file' ' | |
72 | git reset --hard c1 && | |
73 | git rm c1.c && | |
74 | git commit -m "rm c1.c" && | |
52a0a1bd | 75 | cp important c1.c && |
7bb1fcc6 | 76 | git add c1.c && |
ce14e0b2 | 77 | test_must_fail git merge c1a && |
52a0a1bd | 78 | test_path_is_missing .git/MERGE_HEAD && |
7bb1fcc6 CB |
79 | test_cmp important c1.c |
80 | ' | |
81 | ||
82 | test_expect_success 'will not overwrite removed file with staged changes' ' | |
83 | git reset --hard c1 && | |
84 | git rm c1.c && | |
85 | git commit -m "rm c1.c" && | |
52a0a1bd | 86 | cp important c1.c && |
7bb1fcc6 CB |
87 | git add c1.c && |
88 | rm c1.c && | |
ce14e0b2 | 89 | test_must_fail git merge c1a && |
52a0a1bd | 90 | test_path_is_missing .git/MERGE_HEAD && |
7bb1fcc6 CB |
91 | git checkout c1.c && |
92 | test_cmp important c1.c | |
93 | ' | |
94 | ||
189645ca CB |
95 | test_expect_success 'will not overwrite untracked subtree' ' |
96 | git reset --hard c0 && | |
97 | rm -rf sub && | |
98 | mkdir -p sub/f && | |
99 | cp important sub/f/important && | |
100 | test_must_fail git merge sub && | |
101 | test_path_is_missing .git/MERGE_HEAD && | |
102 | test_cmp important sub/f/important | |
103 | ' | |
104 | ||
7980872d CB |
105 | cat >expect <<\EOF |
106 | error: The following untracked working tree files would be overwritten by merge: | |
107 | sub | |
108 | sub2 | |
109 | Please move or remove them before you can merge. | |
110 | EOF | |
111 | ||
f66caaf9 | 112 | test_expect_success 'will not overwrite untracked file in leading path' ' |
189645ca CB |
113 | git reset --hard c0 && |
114 | rm -rf sub && | |
115 | cp important sub && | |
7980872d CB |
116 | cp important sub2 && |
117 | test_must_fail git merge sub 2>out && | |
118 | test_cmp out expect && | |
189645ca | 119 | test_path_is_missing .git/MERGE_HEAD && |
7980872d CB |
120 | test_cmp important sub && |
121 | test_cmp important sub2 && | |
122 | rm -f sub sub2 | |
189645ca CB |
123 | ' |
124 | ||
8523d071 | 125 | test_expect_success SYMLINKS 'will not overwrite untracked symlink in leading path' ' |
189645ca CB |
126 | git reset --hard c0 && |
127 | rm -rf sub && | |
128 | mkdir sub2 && | |
129 | ln -s sub2 sub && | |
130 | test_must_fail git merge sub && | |
131 | test_path_is_missing .git/MERGE_HEAD | |
132 | ' | |
133 | ||
134 | test_expect_success SYMLINKS 'will not be confused by symlink in leading path' ' | |
135 | git reset --hard c0 && | |
136 | rm -rf sub && | |
137 | ln -s sub2 sub && | |
138 | git add sub && | |
139 | git commit -m ln && | |
140 | git checkout sub | |
141 | ' | |
142 | ||
172b6428 CB |
143 | cat >expect <<\EOF |
144 | error: Untracked working tree file 'c0.c' would be overwritten by merge. | |
145 | fatal: read-tree failed | |
146 | EOF | |
147 | ||
148 | test_expect_success 'will not overwrite untracked file on unborn branch' ' | |
149 | git reset --hard c0 && | |
150 | git rm -fr . && | |
151 | git checkout --orphan new && | |
152 | cp important c0.c && | |
d6d9e76d | 153 | test_when_finished "rm c0.c" && |
172b6428 CB |
154 | test_must_fail git merge c0 2>out && |
155 | test_cmp out expect && | |
156 | test_path_is_missing .git/MERGE_HEAD && | |
157 | test_cmp important c0.c | |
158 | ' | |
159 | ||
5b327081 TR |
160 | test_expect_success 'set up unborn branch and content' ' |
161 | git symbolic-ref HEAD refs/heads/unborn && | |
162 | rm -f .git/index && | |
163 | echo foo > tracked-file && | |
164 | git add tracked-file && | |
165 | echo bar > untracked-file | |
166 | ' | |
167 | ||
d6d9e76d | 168 | test_expect_success 'will not clobber WT/index when merging into unborn' ' |
5b327081 TR |
169 | git merge master && |
170 | grep foo tracked-file && | |
171 | git show :tracked-file >expect && | |
172 | grep foo expect && | |
173 | grep bar untracked-file | |
174 | ' | |
175 | ||
7bb1fcc6 | 176 | test_done |