treediff.c 22.4 KB
Newer Older
Edward Thomson committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#include "clar_libgit2.h"
#include "git2/tree.h"
#include "merge.h"
#include "../merge_helpers.h"
#include "diff.h"
#include "hashsig.h"

static git_repository *repo;

#define TEST_REPO_PATH "merge-resolve"

#define TREE_OID_ANCESTOR		"0d52e3a556e189ba0948ae56780918011c1b167d"
#define TREE_OID_MASTER			"1f81433e3161efbf250576c58fede7f6b836f3d3"
#define TREE_OID_BRANCH			"eea9286df54245fea72c5b557291470eb825f38f"
Edward Thomson committed
15 16
#define TREE_OID_RENAMES1		"f5f9dd5886a6ee20272be0aafc790cba43b31931"
#define TREE_OID_RENAMES2		"5fbfbdc04b4eca46f54f4853a3c5a1dce28f5165"
Edward Thomson committed
17 18 19 20 21

#define TREE_OID_DF_ANCESTOR	"b8a3a806d3950e8c0a03a34f234a92eff0e2c68d"
#define TREE_OID_DF_SIDE1		"ee1d6f164893c1866a323f072eeed36b855656be"
#define TREE_OID_DF_SIDE2		"6178885b38fe96e825ac0f492c0a941f288b37f6"

Edward Thomson committed
22 23 24 25
#define TREE_OID_RENAME_CONFLICT_ANCESTOR	"476dbb3e207313d1d8aaa120c6ad204bf1295e53"
#define TREE_OID_RENAME_CONFLICT_OURS		"c4efe31e9decccc8b2b4d3df9aac2cdfe2995618"
#define TREE_OID_RENAME_CONFLICT_THEIRS		"9e7f4359c469f309b6057febf4c6e80742cbed5b"

Edward Thomson committed
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
void test_merge_trees_treediff__initialize(void)
{
	repo = cl_git_sandbox_init(TEST_REPO_PATH);
}

void test_merge_trees_treediff__cleanup(void)
{
	cl_git_sandbox_cleanup();
}

static void test_find_differences(
    const char *ancestor_oidstr,
    const char *ours_oidstr,
    const char *theirs_oidstr,
    struct merge_index_conflict_data *treediff_conflict_data,
    size_t treediff_conflict_data_len)
{
    git_merge_diff_list *merge_diff_list = git_merge_diff_list__alloc(repo);
    git_oid ancestor_oid, ours_oid, theirs_oid;
    git_tree *ancestor_tree, *ours_tree, *theirs_tree;

47
	git_merge_options opts = GIT_MERGE_OPTIONS_INIT;
Edward Thomson committed
48 49 50 51 52 53 54 55 56 57 58 59 60
	opts.flags |= GIT_MERGE_TREE_FIND_RENAMES;
	opts.target_limit = 1000;
	opts.rename_threshold = 50;

	opts.metric = git__malloc(sizeof(git_diff_similarity_metric));
	cl_assert(opts.metric != NULL);

	opts.metric->file_signature = git_diff_find_similar__hashsig_for_file;
	opts.metric->buffer_signature = git_diff_find_similar__hashsig_for_buf;
	opts.metric->free_signature = git_diff_find_similar__hashsig_free;
	opts.metric->similarity = git_diff_find_similar__calc_similarity;
	opts.metric->payload = (void *)GIT_HASHSIG_SMART_WHITESPACE;

nulltoken committed
61 62 63 64 65 66 67 68
	cl_git_pass(git_oid_fromstr(&ancestor_oid, ancestor_oidstr));
	cl_git_pass(git_oid_fromstr(&ours_oid, ours_oidstr));
	cl_git_pass(git_oid_fromstr(&theirs_oid, theirs_oidstr));

	cl_git_pass(git_tree_lookup(&ancestor_tree, repo, &ancestor_oid));
	cl_git_pass(git_tree_lookup(&ours_tree, repo, &ours_oid));
	cl_git_pass(git_tree_lookup(&theirs_tree, repo, &theirs_oid));

Edward Thomson committed
69
	cl_git_pass(git_merge_diff_list__find_differences(merge_diff_list, ancestor_tree, ours_tree, theirs_tree));
Edward Thomson committed
70
	cl_git_pass(git_merge_diff_list__find_renames(repo, merge_diff_list, &opts));
Edward Thomson committed
71 72 73 74

	/*
	dump_merge_index(merge_index);
	 */
nulltoken committed
75 76

	cl_assert(treediff_conflict_data_len == merge_diff_list->conflicts.length);
Edward Thomson committed
77 78 79

	cl_assert(merge_test_merge_conflicts(&merge_diff_list->conflicts, treediff_conflict_data, treediff_conflict_data_len));

nulltoken committed
80 81 82 83
	git_tree_free(ancestor_tree);
	git_tree_free(ours_tree);
	git_tree_free(theirs_tree);

Edward Thomson committed
84
	git_merge_diff_list__free(merge_diff_list);
nulltoken committed
85

Edward Thomson committed
86
	git__free(opts.metric);
Edward Thomson committed
87 88 89 90
}

void test_merge_trees_treediff__simple(void)
{
nulltoken committed
91
	struct merge_index_conflict_data treediff_conflict_data[] = {
Edward Thomson committed
92
		{
Edward Thomson committed
93 94 95
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "233c0919c998ed110a4b6ff36f353aec8b713487", 0, "added-in-master.txt" }, GIT_DELTA_ADDED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
96 97 98
			GIT_MERGE_DIFF_NONE
		},

nulltoken committed
99
		{
Edward Thomson committed
100 101 102
			{ { 0100644, "6212c31dab5e482247d7977e4f0dd3601decf13b", 0, "automergeable.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "ee3fa1b8c00aff7fe02065fdb50864bb0d932ccf", 0, "automergeable.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "058541fc37114bfc1dddf6bd6bffc7fae5c2e6fe", 0, "automergeable.txt" }, GIT_DELTA_MODIFIED },
Edward Thomson committed
103 104
			GIT_MERGE_DIFF_BOTH_MODIFIED
		},
nulltoken committed
105

Edward Thomson committed
106
		{
Edward Thomson committed
107 108 109
			{ { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-branch.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-branch.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "4eb04c9e79e88f6640d01ff5b25ca2a60764f216", 0, "changed-in-branch.txt" }, GIT_DELTA_MODIFIED },
Edward Thomson committed
110 111
			GIT_MERGE_DIFF_NONE
		},
nulltoken committed
112

Edward Thomson committed
113
		{
Edward Thomson committed
114 115 116
			{ { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "11deab00b2d3a6f5a3073988ac050c2d7b6655e2", 0, "changed-in-master.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
117 118
			GIT_MERGE_DIFF_NONE
        },
nulltoken committed
119

Edward Thomson committed
120
		{
Edward Thomson committed
121 122 123
			{ { 0100644, "d427e0b2e138501a3d15cc376077a3631e15bd46", 0, "conflicting.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "4e886e602529caa9ab11d71f86634bd1b6e0de10", 0, "conflicting.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "2bd0a343aeef7a2cf0d158478966a6e587ff3863", 0, "conflicting.txt" }, GIT_DELTA_MODIFIED },
Edward Thomson committed
124 125
			GIT_MERGE_DIFF_BOTH_MODIFIED
        },
nulltoken committed
126

Edward Thomson committed
127
		{
Edward Thomson committed
128 129 130
			{ { 0100644, "dfe3f22baa1f6fce5447901c3086bae368de6bdd", 0, "removed-in-branch.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "dfe3f22baa1f6fce5447901c3086bae368de6bdd", 0, "removed-in-branch.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
Edward Thomson committed
131 132
			GIT_MERGE_DIFF_NONE
        },
nulltoken committed
133

Edward Thomson committed
134
		{
Edward Thomson committed
135 136 137
			{ { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
138 139 140
			GIT_MERGE_DIFF_NONE
		},
    };
nulltoken committed
141

Edward Thomson committed
142 143 144 145 146
    test_find_differences(TREE_OID_ANCESTOR, TREE_OID_MASTER, TREE_OID_BRANCH, treediff_conflict_data, 7);
}

void test_merge_trees_treediff__df_conflicts(void)
{
nulltoken committed
147
	struct merge_index_conflict_data treediff_conflict_data[] = {
Edward Thomson committed
148
		{
Edward Thomson committed
149 150 151
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "49130a28ef567af9a6a6104c38773fedfa5f9742", 0, "dir-10" }, GIT_DELTA_ADDED },
			{ { 0100644, "6c06dcd163587c2cc18be44857e0b71116382aeb", 0, "dir-10" }, GIT_DELTA_ADDED },
Edward Thomson committed
152 153 154 155
			GIT_MERGE_DIFF_BOTH_ADDED,
		},

		{
Edward Thomson committed
156 157 158
			{ { 0100644, "242591eb280ee9eeb2ce63524b9a8b9bc4cb515d", 0, "dir-10/file.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
Edward Thomson committed
159 160
			GIT_MERGE_DIFF_BOTH_DELETED,
		},
nulltoken committed
161

Edward Thomson committed
162
		{
Edward Thomson committed
163 164 165
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "43aafd43bea779ec74317dc361f45ae3f532a505", 0, "dir-6" }, GIT_DELTA_ADDED },
Edward Thomson committed
166 167 168 169
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
170 171 172
			{ { 0100644, "cf8c5cc8a85a1ff5a4ba51e0bc7cf5665669924d", 0, "dir-6/file.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "cf8c5cc8a85a1ff5a4ba51e0bc7cf5665669924d", 0, "dir-6/file.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
Edward Thomson committed
173 174
			GIT_MERGE_DIFF_NONE,
		},
nulltoken committed
175

Edward Thomson committed
176
		{
Edward Thomson committed
177 178 179
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "a031a28ae70e33a641ce4b8a8f6317f1ab79dee4", 0, "dir-7" }, GIT_DELTA_ADDED },
Edward Thomson committed
180 181 182 183
			GIT_MERGE_DIFF_DIRECTORY_FILE,
		},

		{
Edward Thomson committed
184 185 186
			{ { 0100644, "5012fd565b1393bdfda1805d4ec38ce6619e1fd1", 0, "dir-7/file.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "a5563304ddf6caba25cb50323a2ea6f7dbfcadca", 0, "dir-7/file.txt" }, GIT_DELTA_MODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
Edward Thomson committed
187 188
			GIT_MERGE_DIFF_DF_CHILD,
		},
nulltoken committed
189

Edward Thomson committed
190
		{
Edward Thomson committed
191 192 193
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "e9ad6ec3e38364a3d07feda7c4197d4d845c53b5", 0, "dir-8" }, GIT_DELTA_ADDED },
			{ {0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
194 195 196 197
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
198 199 200
			{ { 0100644, "f20c9063fa0bda9a397c96947a7b687305c49753", 0, "dir-8/file.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0100644, "f20c9063fa0bda9a397c96947a7b687305c49753", 0, "dir-8/file.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
201 202
			GIT_MERGE_DIFF_NONE,
		},
nulltoken committed
203

Edward Thomson committed
204
		{
Edward Thomson committed
205 206 207
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "3ef4d30382ca33fdeba9fda895a99e0891ba37aa", 0, "dir-9" }, GIT_DELTA_ADDED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
208 209 210 211
			GIT_MERGE_DIFF_DIRECTORY_FILE,
		},

		{
Edward Thomson committed
212 213 214
			{ { 0100644, "fc4c636d6515e9e261f9260dbcf3cc6eca97ea08", 0, "dir-9/file.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0100644, "76ab0e2868197ec158ddd6c78d8a0d2fd73d38f9", 0, "dir-9/file.txt" }, GIT_DELTA_MODIFIED },
Edward Thomson committed
215 216 217 218
			GIT_MERGE_DIFF_DF_CHILD,
		},

		{
Edward Thomson committed
219 220 221
			{ { 0100644, "1e4ff029aee68d0d69ef9eb6efa6cbf1ec732f99", 0, "file-1" },  GIT_DELTA_UNMODIFIED },
			{ { 0100644, "1e4ff029aee68d0d69ef9eb6efa6cbf1ec732f99", 0, "file-1" },  GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
Edward Thomson committed
222 223 224 225
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
226 227 228
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "5c2411f8075f48a6b2fdb85ebc0d371747c4df15", 0, "file-1/new" }, GIT_DELTA_ADDED },
Edward Thomson committed
229 230 231 232
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
233 234 235
			{ { 0100644, "a39a620dae5bc8b4e771cd4d251b7d080401a21e", 0, "file-2" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "d963979c237d08b6ba39062ee7bf64c7d34a27f8", 0, "file-2" }, GIT_DELTA_MODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
Edward Thomson committed
236 237
			GIT_MERGE_DIFF_DIRECTORY_FILE,
		},
nulltoken committed
238

Edward Thomson committed
239
		{
Edward Thomson committed
240 241 242
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "5c341ead2ba6f2af98ce5ec3fe84f6b6d2899c0d", 0, "file-2/new" }, GIT_DELTA_ADDED },
Edward Thomson committed
243 244 245 246
			GIT_MERGE_DIFF_DF_CHILD,
		},

		{
Edward Thomson committed
247 248 249
			{ { 0100644, "032ebc5ab85d9553bb187d3cd40875ff23a63ed0", 0, "file-3" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0100644, "032ebc5ab85d9553bb187d3cd40875ff23a63ed0", 0, "file-3" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
250 251 252 253
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
254 255 256
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "9efe7723802d4305142eee177e018fee1572c4f4", 0, "file-3/new" }, GIT_DELTA_ADDED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
257 258 259 260
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
261 262 263
			{ { 0100644, "bacac9b3493509aa15e1730e1545fc0919d1dae0", 0, "file-4" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0100644, "7663fce0130db092936b137cabd693ec234eb060", 0, "file-4" }, GIT_DELTA_MODIFIED },
Edward Thomson committed
264 265 266 267
			GIT_MERGE_DIFF_DIRECTORY_FILE,
		},

		{
Edward Thomson committed
268 269 270
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "e49f917b448d1340b31d76e54ba388268fd4c922", 0, "file-4/new" }, GIT_DELTA_ADDED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
271 272 273 274
			GIT_MERGE_DIFF_DF_CHILD,
		},

		{
Edward Thomson committed
275 276 277
			{ { 0100644, "ac4045f965119e6998f4340ed0f411decfb3ec05", 0, "file-5" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
Edward Thomson committed
278 279
			GIT_MERGE_DIFF_BOTH_DELETED,
		},
nulltoken committed
280

Edward Thomson committed
281
		{
Edward Thomson committed
282 283 284
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "cab2cf23998b40f1af2d9d9a756dc9e285a8df4b", 0, "file-5/new" }, GIT_DELTA_ADDED },
			{ { 0100644, "f5504f36e6f4eb797a56fc5bac6c6c7f32969bf2", 0, "file-5/new" }, GIT_DELTA_ADDED },
Edward Thomson committed
285 286 287
			GIT_MERGE_DIFF_BOTH_ADDED,
		},
	};
nulltoken committed
288

Edward Thomson committed
289 290 291
	test_find_differences(TREE_OID_DF_ANCESTOR, TREE_OID_DF_SIDE1, TREE_OID_DF_SIDE2, treediff_conflict_data, 20);
}

Edward Thomson committed
292 293 294 295
void test_merge_trees_treediff__strict_renames(void)
{
	struct merge_index_conflict_data treediff_conflict_data[] = {
		{
Edward Thomson committed
296 297 298
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "233c0919c998ed110a4b6ff36f353aec8b713487", 0, "added-in-master.txt" }, GIT_DELTA_ADDED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
299 300
			GIT_MERGE_DIFF_NONE,
		},
nulltoken committed
301

Edward Thomson committed
302
		{
Edward Thomson committed
303 304 305
			{ { 0100644, "6212c31dab5e482247d7977e4f0dd3601decf13b", 0, "automergeable.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "ee3fa1b8c00aff7fe02065fdb50864bb0d932ccf", 0, "automergeable.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "6212c31dab5e482247d7977e4f0dd3601decf13b", 0, "automergeable.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
306 307 308 309
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
310 311 312
			{ { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "11deab00b2d3a6f5a3073988ac050c2d7b6655e2", 0, "changed-in-master.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
313 314 315 316
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
317 318 319
			{ { 0100644, "d427e0b2e138501a3d15cc376077a3631e15bd46", 0, "conflicting.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "4e886e602529caa9ab11d71f86634bd1b6e0de10", 0, "conflicting.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "d427e0b2e138501a3d15cc376077a3631e15bd46", 0, "conflicting.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
320 321 322 323
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
324 325 326
			{ { 0100644, "dfe3f22baa1f6fce5447901c3086bae368de6bdd", 0, "removed-in-branch.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "dfe3f22baa1f6fce5447901c3086bae368de6bdd", 0, "removed-in-branch.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "dfe3f22baa1f6fce5447901c3086bae368de6bdd", 0, "renamed-in-branch.txt" }, GIT_DELTA_RENAMED },
Edward Thomson committed
327 328 329 330
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
331 332 333
			{ { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0100644,  "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
334 335 336 337
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
338 339 340
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "c8f06f2e3bb2964174677e91f0abead0e43c9e5d", 0, "renamed.txt" }, GIT_DELTA_ADDED },
Edward Thomson committed
341 342 343 344
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
345 346 347
			{ { 0100644, "c8f06f2e3bb2964174677e91f0abead0e43c9e5d", 0, "unchanged.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "c8f06f2e3bb2964174677e91f0abead0e43c9e5d", 0, "unchanged.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "c8f06f2e3bb2964174677e91f0abead0e43c9e5d", 0, "copied.txt" }, GIT_DELTA_RENAMED },
Edward Thomson committed
348 349 350
			GIT_MERGE_DIFF_NONE,
		},
    };
nulltoken committed
351 352

	test_find_differences(TREE_OID_ANCESTOR, TREE_OID_MASTER, TREE_OID_RENAMES1, treediff_conflict_data, 8);
Edward Thomson committed
353 354 355 356 357 358
}

void test_merge_trees_treediff__rename_conflicts(void)
{
	struct merge_index_conflict_data treediff_conflict_data[] = {
		{
Edward Thomson committed
359 360 361
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "f0ce2b8e4986084d9b308fb72709e414c23eb5e6", 0, "0b-duplicated-in-ours.txt" }, GIT_DELTA_ADDED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
362 363 364 365
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
366 367 368
			{ { 0100644, "f0ce2b8e4986084d9b308fb72709e414c23eb5e6", 0, "0b-rewritten-in-ours.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "e376fbdd06ebf021c92724da9f26f44212734e3e", 0, "0b-rewritten-in-ours.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "b2d399ae15224e1d58066e3c8df70ce37de7a656", 0, "0b-rewritten-in-ours.txt" }, GIT_DELTA_MODIFIED },
Edward Thomson committed
369 370 371 372
			GIT_MERGE_DIFF_BOTH_MODIFIED,
		},

		{
Edward Thomson committed
373 374 375
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "2f56120107d680129a5d9791b521cb1e73a2ed31", 0, "0c-duplicated-in-theirs.txt" }, GIT_DELTA_ADDED },
Edward Thomson committed
376 377
			GIT_MERGE_DIFF_NONE,
		},
nulltoken committed
378

Edward Thomson committed
379
		{
Edward Thomson committed
380 381 382
			{ { 0100644, "2f56120107d680129a5d9791b521cb1e73a2ed31", 0, "0c-rewritten-in-theirs.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "efc9121fdedaf08ba180b53ebfbcf71bd488ed09", 0, "0c-rewritten-in-theirs.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "712ebba6669ea847d9829e4f1059d6c830c8b531", 0, "0c-rewritten-in-theirs.txt" }, GIT_DELTA_MODIFIED },
Edward Thomson committed
383 384 385 386
			GIT_MERGE_DIFF_BOTH_MODIFIED,
		},

		{
Edward Thomson committed
387 388 389
			{ { 0100644, "c3d02eeef75183df7584d8d13ac03053910c1301", 0, "1a-renamed-in-ours-edited-in-theirs.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "c3d02eeef75183df7584d8d13ac03053910c1301", 0, "1a-newname-in-ours-edited-in-theirs.txt" }, GIT_DELTA_RENAMED },
			{ { 0100644, "0d872f8e871a30208305978ecbf9e66d864f1638", 0, "1a-renamed-in-ours-edited-in-theirs.txt" }, GIT_DELTA_MODIFIED },
Edward Thomson committed
390 391
			GIT_MERGE_DIFF_RENAMED_MODIFIED,
		},
nulltoken committed
392

Edward Thomson committed
393
		{
Edward Thomson committed
394 395 396
			{ { 0100644, "d0d4594e16f2e19107e3fa7ea63e7aaaff305ffb", 0, "1a-renamed-in-ours.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "d0d4594e16f2e19107e3fa7ea63e7aaaff305ffb", 0, "1a-newname-in-ours.txt" }, GIT_DELTA_RENAMED },
			{ { 0100644, "d0d4594e16f2e19107e3fa7ea63e7aaaff305ffb", 0, "1a-renamed-in-ours.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
397 398
			GIT_MERGE_DIFF_NONE,
		},
nulltoken committed
399

Edward Thomson committed
400
		{
Edward Thomson committed
401 402 403
			{ { 0100644, "241a1005cd9b980732741b74385b891142bcba28", 0, "1b-renamed-in-theirs-edited-in-ours.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "ed9523e62e453e50dd9be1606af19399b96e397a", 0, "1b-renamed-in-theirs-edited-in-ours.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "241a1005cd9b980732741b74385b891142bcba28", 0, "1b-newname-in-theirs-edited-in-ours.txt" }, GIT_DELTA_RENAMED },
Edward Thomson committed
404 405
			GIT_MERGE_DIFF_RENAMED_MODIFIED,
		},
nulltoken committed
406

Edward Thomson committed
407
		{
Edward Thomson committed
408 409 410
			{ { 0100644, "2b5f1f181ee3b58ea751f5dd5d8f9b445520a136", 0, "1b-renamed-in-theirs.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "2b5f1f181ee3b58ea751f5dd5d8f9b445520a136", 0, "1b-renamed-in-theirs.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "2b5f1f181ee3b58ea751f5dd5d8f9b445520a136", 0, "1b-newname-in-theirs.txt" }, GIT_DELTA_RENAMED },
Edward Thomson committed
411 412 413 414
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
415 416 417
			{ { 0100644, "178940b450f238a56c0d75b7955cb57b38191982", 0, "2-renamed-in-both.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "178940b450f238a56c0d75b7955cb57b38191982", 0, "2-newname-in-both.txt" }, GIT_DELTA_RENAMED },
			{ { 0100644, "178940b450f238a56c0d75b7955cb57b38191982", 0, "2-newname-in-both.txt" }, GIT_DELTA_RENAMED },
Edward Thomson committed
418 419
			GIT_MERGE_DIFF_BOTH_RENAMED,
		},
nulltoken committed
420

Edward Thomson committed
421
		{
Edward Thomson committed
422 423 424
			{ { 0100644, "18cb316b1cefa0f8a6946f0e201a8e1a6f845ab9", 0, "3a-renamed-in-ours-deleted-in-theirs.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "18cb316b1cefa0f8a6946f0e201a8e1a6f845ab9", 0, "3a-newname-in-ours-deleted-in-theirs.txt" }, GIT_DELTA_RENAMED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
Edward Thomson committed
425 426
			GIT_MERGE_DIFF_RENAMED_DELETED,
		},
nulltoken committed
427

Edward Thomson committed
428
		{
Edward Thomson committed
429 430 431
			{ { 0100644, "36219b49367146cb2e6a1555b5a9ebd4d0328495", 0, "3b-renamed-in-theirs-deleted-in-ours.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0100644, "36219b49367146cb2e6a1555b5a9ebd4d0328495", 0, "3b-newname-in-theirs-deleted-in-ours.txt" }, GIT_DELTA_RENAMED },
Edward Thomson committed
432 433
			GIT_MERGE_DIFF_RENAMED_DELETED,
		},
nulltoken committed
434

Edward Thomson committed
435
		{
Edward Thomson committed
436 437 438
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "8b5b53cb2aa9ceb1139f5312fcfa3cc3c5a47c9a", 0, "4a-newname-in-ours-added-in-theirs.txt" }, GIT_DELTA_ADDED },
Edward Thomson committed
439
			GIT_MERGE_DIFF_RENAMED_ADDED,
nulltoken committed
440 441
		},

Edward Thomson committed
442
		{
Edward Thomson committed
443 444 445
			{ { 0100644, "227792b52aaa0b238bea00ec7e509b02623f168c", 0, "4a-renamed-in-ours-added-in-theirs.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "227792b52aaa0b238bea00ec7e509b02623f168c", 0, "4a-newname-in-ours-added-in-theirs.txt" }, GIT_DELTA_RENAMED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
Edward Thomson committed
446 447 448 449
			GIT_MERGE_DIFF_RENAMED_ADDED,
		},

		{
Edward Thomson committed
450 451 452
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "de872ee3618b894992e9d1e18ba2ebe256a112f9", 0, "4b-newname-in-theirs-added-in-ours.txt" }, GIT_DELTA_ADDED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
453 454 455 456
			GIT_MERGE_DIFF_RENAMED_ADDED,
		},

		{
Edward Thomson committed
457 458 459
			{ { 0100644, "98d52d07c0b0bbf2b46548f6aa521295c2cb55db", 0, "4b-renamed-in-theirs-added-in-ours.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0100644, "98d52d07c0b0bbf2b46548f6aa521295c2cb55db", 0, "4b-newname-in-theirs-added-in-ours.txt" }, GIT_DELTA_RENAMED },
Edward Thomson committed
460 461
			GIT_MERGE_DIFF_RENAMED_ADDED,
		},
nulltoken committed
462

Edward Thomson committed
463
		{
Edward Thomson committed
464 465 466
			{ { 0100644, "d8fa77b6833082c1ea36b7828a582d4c43882450", 0, "5-both-renamed-1-to-2.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "d8fa77b6833082c1ea36b7828a582d4c43882450", 0, "5-both-renamed-1-to-2-ours.txt" }, GIT_DELTA_RENAMED },
			{ { 0100644, "d8fa77b6833082c1ea36b7828a582d4c43882450", 0, "5-both-renamed-1-to-2-theirs.txt" }, GIT_DELTA_RENAMED },
Edward Thomson committed
467 468
			GIT_MERGE_DIFF_BOTH_RENAMED_1_TO_2,
		},
nulltoken committed
469

Edward Thomson committed
470
		{
Edward Thomson committed
471 472 473
			{ { 0100644, "b42712cfe99a1a500b2a51fe984e0b8a7702ba11", 0, "6-both-renamed-side-1.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "b42712cfe99a1a500b2a51fe984e0b8a7702ba11", 0, "6-both-renamed.txt" }, GIT_DELTA_RENAMED },
			{ { 0100644, "b42712cfe99a1a500b2a51fe984e0b8a7702ba11", 0, "6-both-renamed-side-1.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
474 475
			GIT_MERGE_DIFF_BOTH_RENAMED_2_TO_1,
		},
nulltoken committed
476

Edward Thomson committed
477
		{
Edward Thomson committed
478 479 480
			{ { 0100644, "b69fe837e4cecfd4c9a40cdca7c138468687df07", 0, "6-both-renamed-side-2.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "b69fe837e4cecfd4c9a40cdca7c138468687df07", 0, "6-both-renamed-side-2.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "b69fe837e4cecfd4c9a40cdca7c138468687df07", 0, "6-both-renamed.txt" }, GIT_DELTA_RENAMED },
Edward Thomson committed
481 482 483
			GIT_MERGE_DIFF_BOTH_RENAMED_2_TO_1,
		},
    };
nulltoken committed
484
	test_find_differences(TREE_OID_RENAME_CONFLICT_ANCESTOR,
Edward Thomson committed
485 486 487 488 489 490 491
		TREE_OID_RENAME_CONFLICT_OURS, TREE_OID_RENAME_CONFLICT_THEIRS, treediff_conflict_data, 18);
}

void test_merge_trees_treediff__best_renames(void)
{
	struct merge_index_conflict_data treediff_conflict_data[] = {
		{
Edward Thomson committed
492 493 494
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "233c0919c998ed110a4b6ff36f353aec8b713487", 0, "added-in-master.txt" }, GIT_DELTA_ADDED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
495
			GIT_MERGE_DIFF_NONE,
nulltoken committed
496
		},
Edward Thomson committed
497 498

		{
Edward Thomson committed
499 500 501
			{ { 0100644, "6212c31dab5e482247d7977e4f0dd3601decf13b", 0, "automergeable.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "ee3fa1b8c00aff7fe02065fdb50864bb0d932ccf", 0, "automergeable.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "45299c1ca5e07bba1fd90843056fb559f96b1f5a", 0, "renamed-90.txt" }, GIT_DELTA_RENAMED },
Edward Thomson committed
502 503
			GIT_MERGE_DIFF_RENAMED_MODIFIED,
        },
nulltoken committed
504

Edward Thomson committed
505
		{
Edward Thomson committed
506 507 508
			{ { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "11deab00b2d3a6f5a3073988ac050c2d7b6655e2", 0, "changed-in-master.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "ab6c44a2e84492ad4b41bb6bac87353e9d02ac8b", 0, "changed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
509 510 511 512
			GIT_MERGE_DIFF_NONE,
        },

		{
Edward Thomson committed
513 514 515
			{ { 0100644, "d427e0b2e138501a3d15cc376077a3631e15bd46", 0, "conflicting.txt" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "4e886e602529caa9ab11d71f86634bd1b6e0de10", 0, "conflicting.txt" }, GIT_DELTA_MODIFIED },
			{ { 0100644, "d427e0b2e138501a3d15cc376077a3631e15bd46", 0, "conflicting.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
516 517 518 519
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
520 521 522
			{ { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" },GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_DELETED },
			{ { 0100644, "5c3b68a71fc4fa5d362fd3875e53137c6a5ab7a5", 0, "removed-in-master.txt" }, GIT_DELTA_UNMODIFIED },
Edward Thomson committed
523 524
			GIT_MERGE_DIFF_MODIFIED_DELETED,
        },
nulltoken committed
525

Edward Thomson committed
526
		{
Edward Thomson committed
527 528 529
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "5843febcb23480df0b5edb22a21c59c772bb8e29", 0, "renamed-50.txt" }, GIT_DELTA_ADDED },
Edward Thomson committed
530 531 532 533
			GIT_MERGE_DIFF_NONE,
		},

		{
Edward Thomson committed
534 535 536
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0, "", 0, "" }, GIT_DELTA_UNMODIFIED },
			{ { 0100644, "a77a56a49f8f3ae242e02717f18ebbc60c5cc543", 0, "renamed-75.txt" }, GIT_DELTA_ADDED },
Edward Thomson committed
537 538 539
			GIT_MERGE_DIFF_NONE,
		},
    };
nulltoken committed
540 541

	test_find_differences(TREE_OID_ANCESTOR, TREE_OID_MASTER, TREE_OID_RENAMES2, treediff_conflict_data, 7);
Edward Thomson committed
542
}