]>
Commit | Line | Data |
---|---|---|
bec65a5e ET |
1 | #include "clar_libgit2.h" |
2 | #include "git2/tree.h" | |
3 | #include "merge.h" | |
4 | #include "../merge_helpers.h" | |
5 | #include "diff.h" | |
9be638ec | 6 | #include "diff_tform.h" |
737b5051 | 7 | #include "git2/sys/hashsig.h" |
bec65a5e ET |
8 | |
9 | static git_repository *repo; | |
10 | ||
11 | #define TEST_REPO_PATH "merge-resolve" | |
12 | ||
13 | #define TREE_OID_ANCESTOR "0d52e3a556e189ba0948ae56780918011c1b167d" | |
14 | #define TREE_OID_MASTER "1f81433e3161efbf250576c58fede7f6b836f3d3" | |
15 | #define TREE_OID_BRANCH "eea9286df54245fea72c5b557291470eb825f38f" | |
0462fba5 ET |
16 | #define TREE_OID_RENAMES1 "f5f9dd5886a6ee20272be0aafc790cba43b31931" |
17 | #define TREE_OID_RENAMES2 "5fbfbdc04b4eca46f54f4853a3c5a1dce28f5165" | |
bec65a5e ET |
18 | |
19 | #define TREE_OID_DF_ANCESTOR "b8a3a806d3950e8c0a03a34f234a92eff0e2c68d" | |
20 | #define TREE_OID_DF_SIDE1 "ee1d6f164893c1866a323f072eeed36b855656be" | |
21 | #define TREE_OID_DF_SIDE2 "6178885b38fe96e825ac0f492c0a941f288b37f6" | |
22 | ||
0462fba5 ET |
23 | #define TREE_OID_RENAME_CONFLICT_ANCESTOR "476dbb3e207313d1d8aaa120c6ad204bf1295e53" |
24 | #define TREE_OID_RENAME_CONFLICT_OURS "c4efe31e9decccc8b2b4d3df9aac2cdfe2995618" | |
25 | #define TREE_OID_RENAME_CONFLICT_THEIRS "9e7f4359c469f309b6057febf4c6e80742cbed5b" | |
26 | ||
bec65a5e ET |
27 | void test_merge_trees_treediff__initialize(void) |
28 | { | |
29 | repo = cl_git_sandbox_init(TEST_REPO_PATH); | |
30 | } | |
31 | ||
32 | void test_merge_trees_treediff__cleanup(void) | |
33 | { | |
34 | cl_git_sandbox_cleanup(); | |
35 | } | |
36 | ||
bec65a5e ET |
37 | static void test_find_differences( |
38 | const char *ancestor_oidstr, | |
39 | const char *ours_oidstr, | |
40 | const char *theirs_oidstr, | |
41 | struct merge_index_conflict_data *treediff_conflict_data, | |
42 | size_t treediff_conflict_data_len) | |
43 | { | |
44 | git_merge_diff_list *merge_diff_list = git_merge_diff_list__alloc(repo); | |
45 | git_oid ancestor_oid, ours_oid, theirs_oid; | |
46 | git_tree *ancestor_tree, *ours_tree, *theirs_tree; | |
9ebb5a3f | 47 | git_iterator *ancestor_iter, *ours_iter, *theirs_iter; |
ed1c6446 | 48 | git_iterator_options iter_opts = GIT_ITERATOR_OPTIONS_INIT; |
bec65a5e | 49 | |
5aa2ac6d | 50 | git_merge_options opts = GIT_MERGE_OPTIONS_INIT; |
fa78782f | 51 | opts.flags |= GIT_MERGE_FIND_RENAMES; |
0462fba5 ET |
52 | opts.target_limit = 1000; |
53 | opts.rename_threshold = 50; | |
54 | ||
55 | opts.metric = git__malloc(sizeof(git_diff_similarity_metric)); | |
56 | cl_assert(opts.metric != NULL); | |
57 | ||
58 | opts.metric->file_signature = git_diff_find_similar__hashsig_for_file; | |
59 | opts.metric->buffer_signature = git_diff_find_similar__hashsig_for_buf; | |
60 | opts.metric->free_signature = git_diff_find_similar__hashsig_free; | |
61 | opts.metric->similarity = git_diff_find_similar__calc_similarity; | |
62 | opts.metric->payload = (void *)GIT_HASHSIG_SMART_WHITESPACE; | |
63 | ||
1fed6b07 | 64 | cl_git_pass(git_oid_fromstr(&ancestor_oid, ancestor_oidstr)); |
65 | cl_git_pass(git_oid_fromstr(&ours_oid, ours_oidstr)); | |
66 | cl_git_pass(git_oid_fromstr(&theirs_oid, theirs_oidstr)); | |
67 | ||
68 | cl_git_pass(git_tree_lookup(&ancestor_tree, repo, &ancestor_oid)); | |
69 | cl_git_pass(git_tree_lookup(&ours_tree, repo, &ours_oid)); | |
70 | cl_git_pass(git_tree_lookup(&theirs_tree, repo, &theirs_oid)); | |
71 | ||
ed1c6446 ET |
72 | iter_opts.flags = GIT_ITERATOR_DONT_IGNORE_CASE; |
73 | ||
74 | cl_git_pass(git_iterator_for_tree(&ancestor_iter, ancestor_tree, &iter_opts)); | |
75 | cl_git_pass(git_iterator_for_tree(&ours_iter, ours_tree, &iter_opts)); | |
76 | cl_git_pass(git_iterator_for_tree(&theirs_iter, theirs_tree, &iter_opts)); | |
9ebb5a3f ET |
77 | |
78 | cl_git_pass(git_merge_diff_list__find_differences(merge_diff_list, ancestor_iter, ours_iter, theirs_iter)); | |
0462fba5 | 79 | cl_git_pass(git_merge_diff_list__find_renames(repo, merge_diff_list, &opts)); |
bec65a5e ET |
80 | |
81 | /* | |
82 | dump_merge_index(merge_index); | |
83 | */ | |
1fed6b07 | 84 | |
85 | cl_assert(treediff_conflict_data_len == merge_diff_list->conflicts.length); | |
bec65a5e ET |
86 | |
87 | cl_assert(merge_test_merge_conflicts(&merge_diff_list->conflicts, treediff_conflict_data, treediff_conflict_data_len)); | |
88 | ||
9ebb5a3f ET |
89 | git_iterator_free(ancestor_iter); |
90 | git_iterator_free(ours_iter); | |
91 | git_iterator_free(theirs_iter); | |
92 | ||
1fed6b07 | 93 | git_tree_free(ancestor_tree); |
94 | git_tree_free(ours_tree); | |
95 | git_tree_free(theirs_tree); | |
96 | ||
bec65a5e | 97 | git_merge_diff_list__free(merge_diff_list); |
1fed6b07 | 98 | |
0462fba5 | 99 | git__free(opts.metric); |
bec65a5e ET |
100 | } |
101 | ||
102 | void test_merge_trees_treediff__simple(void) | |
103 | { | |
1fed6b07 | 104 | struct merge_index_conflict_data treediff_conflict_data[] = { |
bec65a5e | 105 | { |
5e151329 ET |
106 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
107 | { { 0100644, "233c0919c998ed110a4b6ff36f353aec8b713487", 0, "added-in-master.txt" }, GIT_DELTA_ADDED }, | |
108 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
bec65a5e ET |
109 | GIT_MERGE_DIFF_NONE |
110 | }, | |
111 | ||
1fed6b07 | 112 | { |
5e151329 ET |
113 | { { 0100644, "6212c31dab5e482247d7977e4f0dd3601decf13b", 0, "automergeable.txt" }, GIT_DELTA_UNMODIFIED }, |
114 | { { 0100644, "ee3fa1b8c00aff7fe02065fdb50864bb0d932ccf", 0, "automergeable.txt" }, GIT_DELTA_MODIFIED }, | |
115 | { { 0100644, "058541fc37114bfc1dddf6bd6bffc7fae5c2e6fe", 0, "automergeable.txt" }, GIT_DELTA_MODIFIED }, | |
bec65a5e ET |
116 | GIT_MERGE_DIFF_BOTH_MODIFIED |
117 | }, | |
1fed6b07 | 118 | |
bec65a5e | 119 | { |
5e151329 ET |
120 | { { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-branch.txt" }, GIT_DELTA_UNMODIFIED }, |
121 | { { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-branch.txt" }, GIT_DELTA_UNMODIFIED }, | |
122 | { { 0100644, "4eb04c9e79e88f6640d01ff5b25ca2a60764f216", 0, "changed-in-branch.txt" }, GIT_DELTA_MODIFIED }, | |
bec65a5e ET |
123 | GIT_MERGE_DIFF_NONE |
124 | }, | |
1fed6b07 | 125 | |
bec65a5e | 126 | { |
5e151329 ET |
127 | { { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, |
128 | { { 0100644, "11deab00b2d3a6f5a3073988ac050c2d7b6655e2", 0, "changed-in-master.txt" }, GIT_DELTA_MODIFIED }, | |
129 | { { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, | |
bec65a5e ET |
130 | GIT_MERGE_DIFF_NONE |
131 | }, | |
1fed6b07 | 132 | |
bec65a5e | 133 | { |
5e151329 ET |
134 | { { 0100644, "d427e0b2e138501a3d15cc376077a3631e15bd46", 0, "conflicting.txt" }, GIT_DELTA_UNMODIFIED }, |
135 | { { 0100644, "4e886e602529caa9ab11d71f86634bd1b6e0de10", 0, "conflicting.txt" }, GIT_DELTA_MODIFIED }, | |
136 | { { 0100644, "2bd0a343aeef7a2cf0d158478966a6e587ff3863", 0, "conflicting.txt" }, GIT_DELTA_MODIFIED }, | |
bec65a5e ET |
137 | GIT_MERGE_DIFF_BOTH_MODIFIED |
138 | }, | |
1fed6b07 | 139 | |
bec65a5e | 140 | { |
5e151329 ET |
141 | { { 0100644, "dfe3f22baa1f6fce5447901c3086bae368de6bdd", 0, "removed-in-branch.txt" }, GIT_DELTA_UNMODIFIED }, |
142 | { { 0100644, "dfe3f22baa1f6fce5447901c3086bae368de6bdd", 0, "removed-in-branch.txt" }, GIT_DELTA_UNMODIFIED }, | |
143 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
bec65a5e ET |
144 | GIT_MERGE_DIFF_NONE |
145 | }, | |
1fed6b07 | 146 | |
bec65a5e | 147 | { |
5e151329 ET |
148 | { { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, |
149 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
150 | { { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, | |
bec65a5e ET |
151 | GIT_MERGE_DIFF_NONE |
152 | }, | |
153 | }; | |
1fed6b07 | 154 | |
bec65a5e ET |
155 | test_find_differences(TREE_OID_ANCESTOR, TREE_OID_MASTER, TREE_OID_BRANCH, treediff_conflict_data, 7); |
156 | } | |
157 | ||
158 | void test_merge_trees_treediff__df_conflicts(void) | |
159 | { | |
1fed6b07 | 160 | struct merge_index_conflict_data treediff_conflict_data[] = { |
bec65a5e | 161 | { |
5e151329 ET |
162 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
163 | { { 0100644, "49130a28ef567af9a6a6104c38773fedfa5f9742", 0, "dir-10" }, GIT_DELTA_ADDED }, | |
164 | { { 0100644, "6c06dcd163587c2cc18be44857e0b71116382aeb", 0, "dir-10" }, GIT_DELTA_ADDED }, | |
bec65a5e ET |
165 | GIT_MERGE_DIFF_BOTH_ADDED, |
166 | }, | |
167 | ||
168 | { | |
5e151329 ET |
169 | { { 0100644, "242591eb280ee9eeb2ce63524b9a8b9bc4cb515d", 0, "dir-10/file.txt" }, GIT_DELTA_UNMODIFIED }, |
170 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
171 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
bec65a5e ET |
172 | GIT_MERGE_DIFF_BOTH_DELETED, |
173 | }, | |
1fed6b07 | 174 | |
bec65a5e | 175 | { |
5e151329 ET |
176 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
177 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
178 | { { 0100644, "43aafd43bea779ec74317dc361f45ae3f532a505", 0, "dir-6" }, GIT_DELTA_ADDED }, | |
bec65a5e ET |
179 | GIT_MERGE_DIFF_NONE, |
180 | }, | |
181 | ||
182 | { | |
5e151329 ET |
183 | { { 0100644, "cf8c5cc8a85a1ff5a4ba51e0bc7cf5665669924d", 0, "dir-6/file.txt" }, GIT_DELTA_UNMODIFIED }, |
184 | { { 0100644, "cf8c5cc8a85a1ff5a4ba51e0bc7cf5665669924d", 0, "dir-6/file.txt" }, GIT_DELTA_UNMODIFIED }, | |
185 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
bec65a5e ET |
186 | GIT_MERGE_DIFF_NONE, |
187 | }, | |
1fed6b07 | 188 | |
bec65a5e | 189 | { |
5e151329 ET |
190 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
191 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
192 | { { 0100644, "a031a28ae70e33a641ce4b8a8f6317f1ab79dee4", 0, "dir-7" }, GIT_DELTA_ADDED }, | |
bec65a5e ET |
193 | GIT_MERGE_DIFF_DIRECTORY_FILE, |
194 | }, | |
195 | ||
196 | { | |
5e151329 ET |
197 | { { 0100644, "5012fd565b1393bdfda1805d4ec38ce6619e1fd1", 0, "dir-7/file.txt" }, GIT_DELTA_UNMODIFIED }, |
198 | { { 0100644, "a5563304ddf6caba25cb50323a2ea6f7dbfcadca", 0, "dir-7/file.txt" }, GIT_DELTA_MODIFIED }, | |
199 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
bec65a5e ET |
200 | GIT_MERGE_DIFF_DF_CHILD, |
201 | }, | |
1fed6b07 | 202 | |
bec65a5e | 203 | { |
5e151329 ET |
204 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
205 | { { 0100644, "e9ad6ec3e38364a3d07feda7c4197d4d845c53b5", 0, "dir-8" }, GIT_DELTA_ADDED }, | |
206 | { {0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
bec65a5e ET |
207 | GIT_MERGE_DIFF_NONE, |
208 | }, | |
209 | ||
210 | { | |
5e151329 ET |
211 | { { 0100644, "f20c9063fa0bda9a397c96947a7b687305c49753", 0, "dir-8/file.txt" }, GIT_DELTA_UNMODIFIED }, |
212 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
213 | { { 0100644, "f20c9063fa0bda9a397c96947a7b687305c49753", 0, "dir-8/file.txt" }, GIT_DELTA_UNMODIFIED }, | |
bec65a5e ET |
214 | GIT_MERGE_DIFF_NONE, |
215 | }, | |
1fed6b07 | 216 | |
bec65a5e | 217 | { |
5e151329 ET |
218 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
219 | { { 0100644, "3ef4d30382ca33fdeba9fda895a99e0891ba37aa", 0, "dir-9" }, GIT_DELTA_ADDED }, | |
220 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
bec65a5e ET |
221 | GIT_MERGE_DIFF_DIRECTORY_FILE, |
222 | }, | |
223 | ||
224 | { | |
5e151329 ET |
225 | { { 0100644, "fc4c636d6515e9e261f9260dbcf3cc6eca97ea08", 0, "dir-9/file.txt" }, GIT_DELTA_UNMODIFIED }, |
226 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
227 | { { 0100644, "76ab0e2868197ec158ddd6c78d8a0d2fd73d38f9", 0, "dir-9/file.txt" }, GIT_DELTA_MODIFIED }, | |
bec65a5e ET |
228 | GIT_MERGE_DIFF_DF_CHILD, |
229 | }, | |
230 | ||
231 | { | |
5e151329 ET |
232 | { { 0100644, "1e4ff029aee68d0d69ef9eb6efa6cbf1ec732f99", 0, "file-1" }, GIT_DELTA_UNMODIFIED }, |
233 | { { 0100644, "1e4ff029aee68d0d69ef9eb6efa6cbf1ec732f99", 0, "file-1" }, GIT_DELTA_UNMODIFIED }, | |
234 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
bec65a5e ET |
235 | GIT_MERGE_DIFF_NONE, |
236 | }, | |
237 | ||
238 | { | |
5e151329 ET |
239 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
240 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
241 | { { 0100644, "5c2411f8075f48a6b2fdb85ebc0d371747c4df15", 0, "file-1/new" }, GIT_DELTA_ADDED }, | |
bec65a5e ET |
242 | GIT_MERGE_DIFF_NONE, |
243 | }, | |
244 | ||
245 | { | |
5e151329 ET |
246 | { { 0100644, "a39a620dae5bc8b4e771cd4d251b7d080401a21e", 0, "file-2" }, GIT_DELTA_UNMODIFIED }, |
247 | { { 0100644, "d963979c237d08b6ba39062ee7bf64c7d34a27f8", 0, "file-2" }, GIT_DELTA_MODIFIED }, | |
248 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
bec65a5e ET |
249 | GIT_MERGE_DIFF_DIRECTORY_FILE, |
250 | }, | |
1fed6b07 | 251 | |
bec65a5e | 252 | { |
5e151329 ET |
253 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
254 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
255 | { { 0100644, "5c341ead2ba6f2af98ce5ec3fe84f6b6d2899c0d", 0, "file-2/new" }, GIT_DELTA_ADDED }, | |
bec65a5e ET |
256 | GIT_MERGE_DIFF_DF_CHILD, |
257 | }, | |
258 | ||
259 | { | |
5e151329 ET |
260 | { { 0100644, "032ebc5ab85d9553bb187d3cd40875ff23a63ed0", 0, "file-3" }, GIT_DELTA_UNMODIFIED }, |
261 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
262 | { { 0100644, "032ebc5ab85d9553bb187d3cd40875ff23a63ed0", 0, "file-3" }, GIT_DELTA_UNMODIFIED }, | |
bec65a5e ET |
263 | GIT_MERGE_DIFF_NONE, |
264 | }, | |
265 | ||
266 | { | |
5e151329 ET |
267 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
268 | { { 0100644, "9efe7723802d4305142eee177e018fee1572c4f4", 0, "file-3/new" }, GIT_DELTA_ADDED }, | |
269 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
bec65a5e ET |
270 | GIT_MERGE_DIFF_NONE, |
271 | }, | |
272 | ||
273 | { | |
5e151329 ET |
274 | { { 0100644, "bacac9b3493509aa15e1730e1545fc0919d1dae0", 0, "file-4" }, GIT_DELTA_UNMODIFIED }, |
275 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
276 | { { 0100644, "7663fce0130db092936b137cabd693ec234eb060", 0, "file-4" }, GIT_DELTA_MODIFIED }, | |
bec65a5e ET |
277 | GIT_MERGE_DIFF_DIRECTORY_FILE, |
278 | }, | |
279 | ||
280 | { | |
5e151329 ET |
281 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
282 | { { 0100644, "e49f917b448d1340b31d76e54ba388268fd4c922", 0, "file-4/new" }, GIT_DELTA_ADDED }, | |
283 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
bec65a5e ET |
284 | GIT_MERGE_DIFF_DF_CHILD, |
285 | }, | |
286 | ||
287 | { | |
5e151329 ET |
288 | { { 0100644, "ac4045f965119e6998f4340ed0f411decfb3ec05", 0, "file-5" }, GIT_DELTA_UNMODIFIED }, |
289 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
290 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
bec65a5e ET |
291 | GIT_MERGE_DIFF_BOTH_DELETED, |
292 | }, | |
1fed6b07 | 293 | |
bec65a5e | 294 | { |
5e151329 ET |
295 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
296 | { { 0100644, "cab2cf23998b40f1af2d9d9a756dc9e285a8df4b", 0, "file-5/new" }, GIT_DELTA_ADDED }, | |
297 | { { 0100644, "f5504f36e6f4eb797a56fc5bac6c6c7f32969bf2", 0, "file-5/new" }, GIT_DELTA_ADDED }, | |
bec65a5e ET |
298 | GIT_MERGE_DIFF_BOTH_ADDED, |
299 | }, | |
300 | }; | |
1fed6b07 | 301 | |
bec65a5e ET |
302 | test_find_differences(TREE_OID_DF_ANCESTOR, TREE_OID_DF_SIDE1, TREE_OID_DF_SIDE2, treediff_conflict_data, 20); |
303 | } | |
304 | ||
0462fba5 ET |
305 | void test_merge_trees_treediff__strict_renames(void) |
306 | { | |
307 | struct merge_index_conflict_data treediff_conflict_data[] = { | |
308 | { | |
5e151329 ET |
309 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
310 | { { 0100644, "233c0919c998ed110a4b6ff36f353aec8b713487", 0, "added-in-master.txt" }, GIT_DELTA_ADDED }, | |
311 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
312 | GIT_MERGE_DIFF_NONE, |
313 | }, | |
1fed6b07 | 314 | |
0462fba5 | 315 | { |
5e151329 ET |
316 | { { 0100644, "6212c31dab5e482247d7977e4f0dd3601decf13b", 0, "automergeable.txt" }, GIT_DELTA_UNMODIFIED }, |
317 | { { 0100644, "ee3fa1b8c00aff7fe02065fdb50864bb0d932ccf", 0, "automergeable.txt" }, GIT_DELTA_MODIFIED }, | |
318 | { { 0100644, "6212c31dab5e482247d7977e4f0dd3601decf13b", 0, "automergeable.txt" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
319 | GIT_MERGE_DIFF_NONE, |
320 | }, | |
321 | ||
322 | { | |
5e151329 ET |
323 | { { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, |
324 | { { 0100644, "11deab00b2d3a6f5a3073988ac050c2d7b6655e2", 0, "changed-in-master.txt" }, GIT_DELTA_MODIFIED }, | |
325 | { { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
326 | GIT_MERGE_DIFF_NONE, |
327 | }, | |
328 | ||
329 | { | |
5e151329 ET |
330 | { { 0100644, "d427e0b2e138501a3d15cc376077a3631e15bd46", 0, "conflicting.txt" }, GIT_DELTA_UNMODIFIED }, |
331 | { { 0100644, "4e886e602529caa9ab11d71f86634bd1b6e0de10", 0, "conflicting.txt" }, GIT_DELTA_MODIFIED }, | |
332 | { { 0100644, "d427e0b2e138501a3d15cc376077a3631e15bd46", 0, "conflicting.txt" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
333 | GIT_MERGE_DIFF_NONE, |
334 | }, | |
335 | ||
336 | { | |
5e151329 ET |
337 | { { 0100644, "dfe3f22baa1f6fce5447901c3086bae368de6bdd", 0, "removed-in-branch.txt" }, GIT_DELTA_UNMODIFIED }, |
338 | { { 0100644, "dfe3f22baa1f6fce5447901c3086bae368de6bdd", 0, "removed-in-branch.txt" }, GIT_DELTA_UNMODIFIED }, | |
339 | { { 0100644, "dfe3f22baa1f6fce5447901c3086bae368de6bdd", 0, "renamed-in-branch.txt" }, GIT_DELTA_RENAMED }, | |
0462fba5 ET |
340 | GIT_MERGE_DIFF_NONE, |
341 | }, | |
342 | ||
343 | { | |
5e151329 ET |
344 | { { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, |
345 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
346 | { { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
347 | GIT_MERGE_DIFF_NONE, |
348 | }, | |
349 | ||
350 | { | |
5e151329 ET |
351 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
352 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
353 | { { 0100644, "c8f06f2e3bb2964174677e91f0abead0e43c9e5d", 0, "renamed.txt" }, GIT_DELTA_ADDED }, | |
0462fba5 ET |
354 | GIT_MERGE_DIFF_NONE, |
355 | }, | |
356 | ||
357 | { | |
5e151329 ET |
358 | { { 0100644, "c8f06f2e3bb2964174677e91f0abead0e43c9e5d", 0, "unchanged.txt" }, GIT_DELTA_UNMODIFIED }, |
359 | { { 0100644, "c8f06f2e3bb2964174677e91f0abead0e43c9e5d", 0, "unchanged.txt" }, GIT_DELTA_UNMODIFIED }, | |
360 | { { 0100644, "c8f06f2e3bb2964174677e91f0abead0e43c9e5d", 0, "copied.txt" }, GIT_DELTA_RENAMED }, | |
0462fba5 ET |
361 | GIT_MERGE_DIFF_NONE, |
362 | }, | |
363 | }; | |
1fed6b07 | 364 | |
365 | test_find_differences(TREE_OID_ANCESTOR, TREE_OID_MASTER, TREE_OID_RENAMES1, treediff_conflict_data, 8); | |
0462fba5 ET |
366 | } |
367 | ||
368 | void test_merge_trees_treediff__rename_conflicts(void) | |
369 | { | |
370 | struct merge_index_conflict_data treediff_conflict_data[] = { | |
371 | { | |
5e151329 ET |
372 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
373 | { { 0100644, "f0ce2b8e4986084d9b308fb72709e414c23eb5e6", 0, "0b-duplicated-in-ours.txt" }, GIT_DELTA_ADDED }, | |
374 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
375 | GIT_MERGE_DIFF_NONE, |
376 | }, | |
377 | ||
378 | { | |
5e151329 ET |
379 | { { 0100644, "f0ce2b8e4986084d9b308fb72709e414c23eb5e6", 0, "0b-rewritten-in-ours.txt" }, GIT_DELTA_UNMODIFIED }, |
380 | { { 0100644, "e376fbdd06ebf021c92724da9f26f44212734e3e", 0, "0b-rewritten-in-ours.txt" }, GIT_DELTA_MODIFIED }, | |
381 | { { 0100644, "b2d399ae15224e1d58066e3c8df70ce37de7a656", 0, "0b-rewritten-in-ours.txt" }, GIT_DELTA_MODIFIED }, | |
0462fba5 ET |
382 | GIT_MERGE_DIFF_BOTH_MODIFIED, |
383 | }, | |
384 | ||
385 | { | |
5e151329 ET |
386 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
387 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
388 | { { 0100644, "2f56120107d680129a5d9791b521cb1e73a2ed31", 0, "0c-duplicated-in-theirs.txt" }, GIT_DELTA_ADDED }, | |
0462fba5 ET |
389 | GIT_MERGE_DIFF_NONE, |
390 | }, | |
1fed6b07 | 391 | |
0462fba5 | 392 | { |
5e151329 ET |
393 | { { 0100644, "2f56120107d680129a5d9791b521cb1e73a2ed31", 0, "0c-rewritten-in-theirs.txt" }, GIT_DELTA_UNMODIFIED }, |
394 | { { 0100644, "efc9121fdedaf08ba180b53ebfbcf71bd488ed09", 0, "0c-rewritten-in-theirs.txt" }, GIT_DELTA_MODIFIED }, | |
395 | { { 0100644, "712ebba6669ea847d9829e4f1059d6c830c8b531", 0, "0c-rewritten-in-theirs.txt" }, GIT_DELTA_MODIFIED }, | |
0462fba5 ET |
396 | GIT_MERGE_DIFF_BOTH_MODIFIED, |
397 | }, | |
398 | ||
399 | { | |
5e151329 ET |
400 | { { 0100644, "c3d02eeef75183df7584d8d13ac03053910c1301", 0, "1a-renamed-in-ours-edited-in-theirs.txt" }, GIT_DELTA_UNMODIFIED }, |
401 | { { 0100644, "c3d02eeef75183df7584d8d13ac03053910c1301", 0, "1a-newname-in-ours-edited-in-theirs.txt" }, GIT_DELTA_RENAMED }, | |
402 | { { 0100644, "0d872f8e871a30208305978ecbf9e66d864f1638", 0, "1a-renamed-in-ours-edited-in-theirs.txt" }, GIT_DELTA_MODIFIED }, | |
0462fba5 ET |
403 | GIT_MERGE_DIFF_RENAMED_MODIFIED, |
404 | }, | |
1fed6b07 | 405 | |
0462fba5 | 406 | { |
5e151329 ET |
407 | { { 0100644, "d0d4594e16f2e19107e3fa7ea63e7aaaff305ffb", 0, "1a-renamed-in-ours.txt" }, GIT_DELTA_UNMODIFIED }, |
408 | { { 0100644, "d0d4594e16f2e19107e3fa7ea63e7aaaff305ffb", 0, "1a-newname-in-ours.txt" }, GIT_DELTA_RENAMED }, | |
409 | { { 0100644, "d0d4594e16f2e19107e3fa7ea63e7aaaff305ffb", 0, "1a-renamed-in-ours.txt" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
410 | GIT_MERGE_DIFF_NONE, |
411 | }, | |
1fed6b07 | 412 | |
0462fba5 | 413 | { |
5e151329 ET |
414 | { { 0100644, "241a1005cd9b980732741b74385b891142bcba28", 0, "1b-renamed-in-theirs-edited-in-ours.txt" }, GIT_DELTA_UNMODIFIED }, |
415 | { { 0100644, "ed9523e62e453e50dd9be1606af19399b96e397a", 0, "1b-renamed-in-theirs-edited-in-ours.txt" }, GIT_DELTA_MODIFIED }, | |
416 | { { 0100644, "241a1005cd9b980732741b74385b891142bcba28", 0, "1b-newname-in-theirs-edited-in-ours.txt" }, GIT_DELTA_RENAMED }, | |
0462fba5 ET |
417 | GIT_MERGE_DIFF_RENAMED_MODIFIED, |
418 | }, | |
1fed6b07 | 419 | |
0462fba5 | 420 | { |
5e151329 ET |
421 | { { 0100644, "2b5f1f181ee3b58ea751f5dd5d8f9b445520a136", 0, "1b-renamed-in-theirs.txt" }, GIT_DELTA_UNMODIFIED }, |
422 | { { 0100644, "2b5f1f181ee3b58ea751f5dd5d8f9b445520a136", 0, "1b-renamed-in-theirs.txt" }, GIT_DELTA_UNMODIFIED }, | |
423 | { { 0100644, "2b5f1f181ee3b58ea751f5dd5d8f9b445520a136", 0, "1b-newname-in-theirs.txt" }, GIT_DELTA_RENAMED }, | |
0462fba5 ET |
424 | GIT_MERGE_DIFF_NONE, |
425 | }, | |
426 | ||
427 | { | |
5e151329 ET |
428 | { { 0100644, "178940b450f238a56c0d75b7955cb57b38191982", 0, "2-renamed-in-both.txt" }, GIT_DELTA_UNMODIFIED }, |
429 | { { 0100644, "178940b450f238a56c0d75b7955cb57b38191982", 0, "2-newname-in-both.txt" }, GIT_DELTA_RENAMED }, | |
430 | { { 0100644, "178940b450f238a56c0d75b7955cb57b38191982", 0, "2-newname-in-both.txt" }, GIT_DELTA_RENAMED }, | |
0462fba5 ET |
431 | GIT_MERGE_DIFF_BOTH_RENAMED, |
432 | }, | |
1fed6b07 | 433 | |
0462fba5 | 434 | { |
5e151329 ET |
435 | { { 0100644, "18cb316b1cefa0f8a6946f0e201a8e1a6f845ab9", 0, "3a-renamed-in-ours-deleted-in-theirs.txt" }, GIT_DELTA_UNMODIFIED }, |
436 | { { 0100644, "18cb316b1cefa0f8a6946f0e201a8e1a6f845ab9", 0, "3a-newname-in-ours-deleted-in-theirs.txt" }, GIT_DELTA_RENAMED }, | |
437 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
0462fba5 ET |
438 | GIT_MERGE_DIFF_RENAMED_DELETED, |
439 | }, | |
1fed6b07 | 440 | |
0462fba5 | 441 | { |
5e151329 ET |
442 | { { 0100644, "36219b49367146cb2e6a1555b5a9ebd4d0328495", 0, "3b-renamed-in-theirs-deleted-in-ours.txt" }, GIT_DELTA_UNMODIFIED }, |
443 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
444 | { { 0100644, "36219b49367146cb2e6a1555b5a9ebd4d0328495", 0, "3b-newname-in-theirs-deleted-in-ours.txt" }, GIT_DELTA_RENAMED }, | |
0462fba5 ET |
445 | GIT_MERGE_DIFF_RENAMED_DELETED, |
446 | }, | |
1fed6b07 | 447 | |
0462fba5 | 448 | { |
5e151329 ET |
449 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
450 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
451 | { { 0100644, "8b5b53cb2aa9ceb1139f5312fcfa3cc3c5a47c9a", 0, "4a-newname-in-ours-added-in-theirs.txt" }, GIT_DELTA_ADDED }, | |
0462fba5 | 452 | GIT_MERGE_DIFF_RENAMED_ADDED, |
1fed6b07 | 453 | }, |
454 | ||
0462fba5 | 455 | { |
5e151329 ET |
456 | { { 0100644, "227792b52aaa0b238bea00ec7e509b02623f168c", 0, "4a-renamed-in-ours-added-in-theirs.txt" }, GIT_DELTA_UNMODIFIED }, |
457 | { { 0100644, "227792b52aaa0b238bea00ec7e509b02623f168c", 0, "4a-newname-in-ours-added-in-theirs.txt" }, GIT_DELTA_RENAMED }, | |
458 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
0462fba5 ET |
459 | GIT_MERGE_DIFF_RENAMED_ADDED, |
460 | }, | |
461 | ||
462 | { | |
5e151329 ET |
463 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
464 | { { 0100644, "de872ee3618b894992e9d1e18ba2ebe256a112f9", 0, "4b-newname-in-theirs-added-in-ours.txt" }, GIT_DELTA_ADDED }, | |
465 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
466 | GIT_MERGE_DIFF_RENAMED_ADDED, |
467 | }, | |
468 | ||
469 | { | |
5e151329 ET |
470 | { { 0100644, "98d52d07c0b0bbf2b46548f6aa521295c2cb55db", 0, "4b-renamed-in-theirs-added-in-ours.txt" }, GIT_DELTA_UNMODIFIED }, |
471 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
472 | { { 0100644, "98d52d07c0b0bbf2b46548f6aa521295c2cb55db", 0, "4b-newname-in-theirs-added-in-ours.txt" }, GIT_DELTA_RENAMED }, | |
0462fba5 ET |
473 | GIT_MERGE_DIFF_RENAMED_ADDED, |
474 | }, | |
1fed6b07 | 475 | |
0462fba5 | 476 | { |
5e151329 ET |
477 | { { 0100644, "d8fa77b6833082c1ea36b7828a582d4c43882450", 0, "5-both-renamed-1-to-2.txt" }, GIT_DELTA_UNMODIFIED }, |
478 | { { 0100644, "d8fa77b6833082c1ea36b7828a582d4c43882450", 0, "5-both-renamed-1-to-2-ours.txt" }, GIT_DELTA_RENAMED }, | |
479 | { { 0100644, "d8fa77b6833082c1ea36b7828a582d4c43882450", 0, "5-both-renamed-1-to-2-theirs.txt" }, GIT_DELTA_RENAMED }, | |
0462fba5 ET |
480 | GIT_MERGE_DIFF_BOTH_RENAMED_1_TO_2, |
481 | }, | |
1fed6b07 | 482 | |
0462fba5 | 483 | { |
5e151329 ET |
484 | { { 0100644, "b42712cfe99a1a500b2a51fe984e0b8a7702ba11", 0, "6-both-renamed-side-1.txt" }, GIT_DELTA_UNMODIFIED }, |
485 | { { 0100644, "b42712cfe99a1a500b2a51fe984e0b8a7702ba11", 0, "6-both-renamed.txt" }, GIT_DELTA_RENAMED }, | |
486 | { { 0100644, "b42712cfe99a1a500b2a51fe984e0b8a7702ba11", 0, "6-both-renamed-side-1.txt" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
487 | GIT_MERGE_DIFF_BOTH_RENAMED_2_TO_1, |
488 | }, | |
1fed6b07 | 489 | |
0462fba5 | 490 | { |
5e151329 ET |
491 | { { 0100644, "b69fe837e4cecfd4c9a40cdca7c138468687df07", 0, "6-both-renamed-side-2.txt" }, GIT_DELTA_UNMODIFIED }, |
492 | { { 0100644, "b69fe837e4cecfd4c9a40cdca7c138468687df07", 0, "6-both-renamed-side-2.txt" }, GIT_DELTA_UNMODIFIED }, | |
493 | { { 0100644, "b69fe837e4cecfd4c9a40cdca7c138468687df07", 0, "6-both-renamed.txt" }, GIT_DELTA_RENAMED }, | |
0462fba5 ET |
494 | GIT_MERGE_DIFF_BOTH_RENAMED_2_TO_1, |
495 | }, | |
496 | }; | |
1fed6b07 | 497 | test_find_differences(TREE_OID_RENAME_CONFLICT_ANCESTOR, |
0462fba5 ET |
498 | TREE_OID_RENAME_CONFLICT_OURS, TREE_OID_RENAME_CONFLICT_THEIRS, treediff_conflict_data, 18); |
499 | } | |
500 | ||
501 | void test_merge_trees_treediff__best_renames(void) | |
502 | { | |
503 | struct merge_index_conflict_data treediff_conflict_data[] = { | |
504 | { | |
5e151329 ET |
505 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
506 | { { 0100644, "233c0919c998ed110a4b6ff36f353aec8b713487", 0, "added-in-master.txt" }, GIT_DELTA_ADDED }, | |
507 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 | 508 | GIT_MERGE_DIFF_NONE, |
1fed6b07 | 509 | }, |
0462fba5 ET |
510 | |
511 | { | |
5e151329 ET |
512 | { { 0100644, "6212c31dab5e482247d7977e4f0dd3601decf13b", 0, "automergeable.txt" }, GIT_DELTA_UNMODIFIED }, |
513 | { { 0100644, "ee3fa1b8c00aff7fe02065fdb50864bb0d932ccf", 0, "automergeable.txt" }, GIT_DELTA_MODIFIED }, | |
514 | { { 0100644, "45299c1ca5e07bba1fd90843056fb559f96b1f5a", 0, "renamed-90.txt" }, GIT_DELTA_RENAMED }, | |
0462fba5 ET |
515 | GIT_MERGE_DIFF_RENAMED_MODIFIED, |
516 | }, | |
1fed6b07 | 517 | |
0462fba5 | 518 | { |
5e151329 ET |
519 | { { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, |
520 | { { 0100644, "11deab00b2d3a6f5a3073988ac050c2d7b6655e2", 0, "changed-in-master.txt" }, GIT_DELTA_MODIFIED }, | |
521 | { { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
522 | GIT_MERGE_DIFF_NONE, |
523 | }, | |
524 | ||
525 | { | |
5e151329 ET |
526 | { { 0100644, "d427e0b2e138501a3d15cc376077a3631e15bd46", 0, "conflicting.txt" }, GIT_DELTA_UNMODIFIED }, |
527 | { { 0100644, "4e886e602529caa9ab11d71f86634bd1b6e0de10", 0, "conflicting.txt" }, GIT_DELTA_MODIFIED }, | |
528 | { { 0100644, "d427e0b2e138501a3d15cc376077a3631e15bd46", 0, "conflicting.txt" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
529 | GIT_MERGE_DIFF_NONE, |
530 | }, | |
531 | ||
532 | { | |
5e151329 ET |
533 | { { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" },GIT_DELTA_UNMODIFIED }, |
534 | { { 0, "", 0, "" }, GIT_DELTA_DELETED }, | |
535 | { { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" }, GIT_DELTA_UNMODIFIED }, | |
0462fba5 ET |
536 | GIT_MERGE_DIFF_MODIFIED_DELETED, |
537 | }, | |
1fed6b07 | 538 | |
0462fba5 | 539 | { |
5e151329 ET |
540 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
541 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
542 | { { 0100644, "5843febcb23480df0b5edb22a21c59c772bb8e29", 0, "renamed-50.txt" }, GIT_DELTA_ADDED }, | |
0462fba5 ET |
543 | GIT_MERGE_DIFF_NONE, |
544 | }, | |
545 | ||
546 | { | |
5e151329 ET |
547 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, |
548 | { { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED }, | |
549 | { { 0100644, "a77a56a49f8f3ae242e02717f18ebbc60c5cc543", 0, "renamed-75.txt" }, GIT_DELTA_ADDED }, | |
0462fba5 ET |
550 | GIT_MERGE_DIFF_NONE, |
551 | }, | |
552 | }; | |
1fed6b07 | 553 | |
554 | test_find_differences(TREE_OID_ANCESTOR, TREE_OID_MASTER, TREE_OID_RENAMES2, treediff_conflict_data, 7); | |
0462fba5 | 555 | } |