]> git.proxmox.com Git - libgit2.git/blame - tests/merge/trees/treediff.c
New upstream version 1.4.3+dfsg.1
[libgit2.git] / tests / merge / trees / treediff.c
CommitLineData
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
9static 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
27void test_merge_trees_treediff__initialize(void)
28{
29 repo = cl_git_sandbox_init(TEST_REPO_PATH);
30}
31
32void test_merge_trees_treediff__cleanup(void)
33{
34 cl_git_sandbox_cleanup();
35}
36
bec65a5e
ET
37static 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
102void 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
158void 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
305void 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
368void 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
501void 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}