]> git.ipfire.org Git - thirdparty/git.git/blame - merge-recursive.c
merge-recursive: fix some overly long lines
[thirdparty/git.git] / merge-recursive.c
CommitLineData
9047ebbc
MV
1/*
2 * Recursive Merge algorithm stolen from git-merge-recursive.py by
3 * Fredrik Kuivinen.
4 * The thieves were Alex Riesen and Johannes Schindelin, in June/July 2006
5 */
6#include "cache.h"
b2141fc1 7#include "config.h"
1c4b6604 8#include "advice.h"
697cc8ef 9#include "lockfile.h"
9047ebbc 10#include "cache-tree.h"
cbd53a21 11#include "object-store.h"
109cd76d 12#include "repository.h"
9047ebbc
MV
13#include "commit.h"
14#include "blob.h"
15#include "builtin.h"
16#include "tree-walk.h"
17#include "diff.h"
18#include "diffcore.h"
19#include "tag.h"
14ba97f8 20#include "alloc.h"
9047ebbc
MV
21#include "unpack-trees.h"
22#include "string-list.h"
23#include "xdiff-interface.h"
24#include "ll-merge.h"
9047ebbc
MV
25#include "attr.h"
26#include "merge-recursive.h"
9800c0df 27#include "dir.h"
68d03e4a 28#include "submodule.h"
18cfc088 29#include "revision.h"
64043556 30#include "commit-reach.h"
9047ebbc 31
fc65b00d
KW
32struct path_hashmap_entry {
33 struct hashmap_entry e;
34 char path[FLEX_ARRAY];
35};
36
37static int path_hashmap_cmp(const void *cmp_data,
38 const void *entry,
39 const void *entry_or_key,
40 const void *keydata)
41{
42 const struct path_hashmap_entry *a = entry;
43 const struct path_hashmap_entry *b = entry_or_key;
44 const char *key = keydata;
45
46 if (ignore_case)
47 return strcasecmp(a->path, key ? key : b->path);
48 else
49 return strcmp(a->path, key ? key : b->path);
50}
51
52static unsigned int path_hash(const char *path)
53{
54 return ignore_case ? strihash(path) : strhash(path);
55}
56
7fe40b88
EN
57static struct dir_rename_entry *dir_rename_find_entry(struct hashmap *hashmap,
58 char *dir)
59{
60 struct dir_rename_entry key;
61
62 if (dir == NULL)
63 return NULL;
64 hashmap_entry_init(&key, strhash(dir));
65 key.dir = dir;
66 return hashmap_get(hashmap, &key, NULL);
67}
68
69static int dir_rename_cmp(const void *unused_cmp_data,
70 const void *entry,
71 const void *entry_or_key,
72 const void *unused_keydata)
73{
74 const struct dir_rename_entry *e1 = entry;
75 const struct dir_rename_entry *e2 = entry_or_key;
76
77 return strcmp(e1->dir, e2->dir);
78}
79
80static void dir_rename_init(struct hashmap *map)
81{
82 hashmap_init(map, dir_rename_cmp, NULL, 0);
83}
84
85static void dir_rename_entry_init(struct dir_rename_entry *entry,
86 char *directory)
87{
88 hashmap_entry_init(entry, strhash(directory));
89 entry->dir = directory;
90 entry->non_unique_new_dir = 0;
91 strbuf_init(&entry->new_dir, 0);
92 string_list_init(&entry->possible_new_dirs, 0);
93}
94
e95ab70a
EN
95static struct collision_entry *collision_find_entry(struct hashmap *hashmap,
96 char *target_file)
97{
98 struct collision_entry key;
99
100 hashmap_entry_init(&key, strhash(target_file));
101 key.target_file = target_file;
102 return hashmap_get(hashmap, &key, NULL);
103}
104
105static int collision_cmp(void *unused_cmp_data,
106 const struct collision_entry *e1,
107 const struct collision_entry *e2,
108 const void *unused_keydata)
109{
110 return strcmp(e1->target_file, e2->target_file);
111}
112
113static void collision_init(struct hashmap *map)
114{
115 hashmap_init(map, (hashmap_cmp_fn) collision_cmp, NULL, 0);
116}
117
259ccb6c 118static void flush_output(struct merge_options *opt)
bc9204d4 119{
259ccb6c
EN
120 if (opt->buffer_output < 2 && opt->obuf.len) {
121 fputs(opt->obuf.buf, stdout);
122 strbuf_reset(&opt->obuf);
bc9204d4
JS
123 }
124}
125
259ccb6c 126static int err(struct merge_options *opt, const char *err, ...)
bc9204d4
JS
127{
128 va_list params;
129
259ccb6c
EN
130 if (opt->buffer_output < 2)
131 flush_output(opt);
f1e2426b 132 else {
259ccb6c
EN
133 strbuf_complete(&opt->obuf, '\n');
134 strbuf_addstr(&opt->obuf, "error: ");
f1e2426b 135 }
bc9204d4 136 va_start(params, err);
259ccb6c 137 strbuf_vaddf(&opt->obuf, err, params);
bc9204d4 138 va_end(params);
259ccb6c
EN
139 if (opt->buffer_output > 1)
140 strbuf_addch(&opt->obuf, '\n');
f1e2426b 141 else {
259ccb6c
EN
142 error("%s", opt->obuf.buf);
143 strbuf_reset(&opt->obuf);
f1e2426b 144 }
bc9204d4
JS
145
146 return -1;
147}
148
d7cf3a96
NTND
149static struct tree *shift_tree_object(struct repository *repo,
150 struct tree *one, struct tree *two,
85e51b78 151 const char *subtree_shift)
9047ebbc 152{
f2fd0760 153 struct object_id shifted;
9047ebbc 154
85e51b78 155 if (!*subtree_shift) {
90d34051 156 shift_tree(repo, &one->object.oid, &two->object.oid, &shifted, 0);
85e51b78 157 } else {
90d34051 158 shift_tree_by(repo, &one->object.oid, &two->object.oid, &shifted,
85e51b78
JH
159 subtree_shift);
160 }
4a7e27e9 161 if (oideq(&two->object.oid, &shifted))
9047ebbc 162 return two;
d7cf3a96 163 return lookup_tree(repo, &shifted);
9047ebbc
MV
164}
165
a133c40b
NTND
166static inline void set_commit_tree(struct commit *c, struct tree *t)
167{
168 c->maybe_tree = t;
169}
170
d7cf3a96
NTND
171static struct commit *make_virtual_commit(struct repository *repo,
172 struct tree *tree,
173 const char *comment)
9047ebbc 174{
d7cf3a96 175 struct commit *commit = alloc_commit_node(repo);
ae8e4c9c 176
a2571653 177 set_merge_remote_desc(commit, comment, (struct object *)commit);
a133c40b 178 set_commit_tree(commit, tree);
9047ebbc
MV
179 commit->object.parsed = 1;
180 return commit;
181}
182
183/*
184 * Since we use get_tree_entry(), which does not put the read object into
185 * the object pool, we cannot rely on a == b.
186 */
b4da9d62 187static int oid_eq(const struct object_id *a, const struct object_id *b)
9047ebbc
MV
188{
189 if (!a && !b)
190 return 2;
4a7e27e9 191 return a && b && oideq(a, b);
9047ebbc
MV
192}
193
25c39363
EN
194enum rename_type {
195 RENAME_NORMAL = 0,
5455c338 196 RENAME_VIA_DIR,
7f867165 197 RENAME_ADD,
25c39363 198 RENAME_DELETE,
4f66dade 199 RENAME_ONE_FILE_TO_ONE,
461f5041
EN
200 RENAME_ONE_FILE_TO_TWO,
201 RENAME_TWO_FILES_TO_ONE
25c39363
EN
202};
203
9047ebbc
MV
204/*
205 * Since we want to write the index eventually, we cannot reuse the index
206 * for these (temporary) data.
207 */
9cba13ca 208struct stage_data {
8daec1df 209 struct diff_filespec stages[4]; /* mostly for oid & mode; maybe path */
4f66dade 210 struct rename_conflict_info *rename_conflict_info;
9047ebbc
MV
211 unsigned processed:1;
212};
213
967d6be7 214struct rename {
6d169fd3 215 unsigned processed:1;
967d6be7 216 struct diff_filepair *pair;
c336ab85 217 const char *branch; /* branch that the rename occurred on */
6d169fd3
EN
218 /*
219 * If directory rename detection affected this rename, what was its
220 * original type ('A' or 'R') and it's original destination before
221 * the directory rename (otherwise, '\0' and NULL for these two vars).
222 */
223 char dir_rename_original_type;
224 char *dir_rename_original_dest;
967d6be7
EN
225 /*
226 * Purpose of src_entry and dst_entry:
227 *
228 * If 'before' is renamed to 'after' then src_entry will contain
229 * the versions of 'before' from the merge_base, HEAD, and MERGE in
230 * stages 1, 2, and 3; dst_entry will contain the respective
231 * versions of 'after' in corresponding locations. Thus, we have a
232 * total of six modes and oids, though some will be null. (Stage 0
233 * is ignored; we're interested in handling conflicts.)
234 *
235 * Since we don't turn on break-rewrites by default, neither
236 * src_entry nor dst_entry can have all three of their stages have
237 * non-null oids, meaning at most four of the six will be non-null.
238 * Also, since this is a rename, both src_entry and dst_entry will
239 * have at least one non-null oid, meaning at least two will be
240 * non-null. Of the six oids, a typical rename will have three be
241 * non-null. Only two implies a rename/delete, and four implies a
242 * rename/add.
243 */
244 struct stage_data *src_entry;
245 struct stage_data *dst_entry;
967d6be7
EN
246};
247
248struct rename_conflict_info {
249 enum rename_type rename_type;
e9cd1b5c
EN
250 struct rename *ren1;
251 struct rename *ren2;
967d6be7
EN
252};
253
4f66dade 254static inline void setup_rename_conflict_info(enum rename_type rename_type,
e9cd1b5c
EN
255 struct merge_options *opt,
256 struct rename *ren1,
c336ab85 257 struct rename *ren2)
25c39363 258{
4f445453
EN
259 struct rename_conflict_info *ci;
260
261 /*
262 * When we have two renames involved, it's easiest to get the
263 * correct things into stage 2 and 3, and to make sure that the
264 * content merge puts HEAD before the other branch if we just
259ccb6c 265 * ensure that branch1 == opt->branch1. So, simply flip arguments
4f445453
EN
266 * around if we don't have that.
267 */
c336ab85
EN
268 if (ren2 && ren1->branch != opt->branch1) {
269 setup_rename_conflict_info(rename_type, opt, ren2, ren1);
4f445453
EN
270 return;
271 }
272
273 ci = xcalloc(1, sizeof(struct rename_conflict_info));
25c39363 274 ci->rename_type = rename_type;
e9cd1b5c
EN
275 ci->ren1 = ren1;
276 ci->ren2 = ren2;
25c39363 277
e9cd1b5c
EN
278 ci->ren1->dst_entry->processed = 0;
279 ci->ren1->dst_entry->rename_conflict_info = ci;
e9cd1b5c
EN
280 if (ren2) {
281 ci->ren2->dst_entry->rename_conflict_info = ci;
25c39363
EN
282 }
283}
284
259ccb6c 285static int show(struct merge_options *opt, int v)
9047ebbc 286{
259ccb6c 287 return (!opt->call_depth && opt->verbosity >= v) || opt->verbosity >= 5;
9047ebbc
MV
288}
289
28bea9e5 290__attribute__((format (printf, 3, 4)))
259ccb6c 291static void output(struct merge_options *opt, int v, const char *fmt, ...)
9047ebbc 292{
9047ebbc
MV
293 va_list ap;
294
259ccb6c 295 if (!show(opt, v))
9047ebbc
MV
296 return;
297
259ccb6c 298 strbuf_addchars(&opt->obuf, ' ', opt->call_depth * 2);
9047ebbc
MV
299
300 va_start(ap, fmt);
259ccb6c 301 strbuf_vaddf(&opt->obuf, fmt, ap);
9047ebbc
MV
302 va_end(ap);
303
259ccb6c
EN
304 strbuf_addch(&opt->obuf, '\n');
305 if (!opt->buffer_output)
306 flush_output(opt);
9047ebbc
MV
307}
308
259ccb6c 309static void output_commit_title(struct merge_options *opt, struct commit *commit)
9047ebbc 310{
e2e5ac23
NTND
311 struct merge_remote_desc *desc;
312
259ccb6c 313 strbuf_addchars(&opt->obuf, ' ', opt->call_depth * 2);
e2e5ac23
NTND
314 desc = merge_remote_util(commit);
315 if (desc)
259ccb6c 316 strbuf_addf(&opt->obuf, "virtual %s\n", desc->name);
9047ebbc 317 else {
259ccb6c 318 strbuf_add_unique_abbrev(&opt->obuf, &commit->object.oid,
a94bb683 319 DEFAULT_ABBREV);
259ccb6c 320 strbuf_addch(&opt->obuf, ' ');
9047ebbc 321 if (parse_commit(commit) != 0)
259ccb6c 322 strbuf_addstr(&opt->obuf, _("(bad commit)\n"));
9047ebbc 323 else {
49b7120e 324 const char *title;
8597ea3a 325 const char *msg = get_commit_buffer(commit, NULL);
bc6b8fc1 326 int len = find_commit_subject(msg, &title);
49b7120e 327 if (len)
259ccb6c 328 strbuf_addf(&opt->obuf, "%.*s\n", len, title);
bc6b8fc1 329 unuse_commit_buffer(commit, msg);
9047ebbc
MV
330 }
331 }
259ccb6c 332 flush_output(opt);
9047ebbc
MV
333}
334
259ccb6c 335static int add_cacheinfo(struct merge_options *opt,
8daec1df 336 const struct diff_filespec *blob,
d90e759f 337 const char *path, int stage, int refresh, int options)
9047ebbc 338{
259ccb6c 339 struct index_state *istate = opt->repo->index;
9047ebbc 340 struct cache_entry *ce;
1335d76e
JH
341 int ret;
342
8daec1df 343 ce = make_cache_entry(istate, blob->mode, &blob->oid, path, stage, 0);
9047ebbc 344 if (!ce)
259ccb6c 345 return err(opt, _("add_cacheinfo failed for path '%s'; merge aborting."), path);
1335d76e 346
0d6caa2d 347 ret = add_index_entry(istate, ce, options);
1335d76e
JH
348 if (refresh) {
349 struct cache_entry *nce;
350
0d6caa2d
NTND
351 nce = refresh_cache_entry(istate, ce,
352 CE_MATCH_REFRESH | CE_MATCH_IGNORE_MISSING);
55e9f0e5 353 if (!nce)
259ccb6c 354 return err(opt, _("add_cacheinfo failed to refresh for path '%s'; merge aborting."), path);
1335d76e 355 if (nce != ce)
0d6caa2d 356 ret = add_index_entry(istate, nce, options);
1335d76e
JH
357 }
358 return ret;
9047ebbc
MV
359}
360
9047ebbc
MV
361static void init_tree_desc_from_tree(struct tree_desc *desc, struct tree *tree)
362{
363 parse_tree(tree);
364 init_tree_desc(desc, tree->buffer, tree->size);
365}
366
259ccb6c 367static int unpack_trees_start(struct merge_options *opt,
3f1c1c36
EN
368 struct tree *common,
369 struct tree *head,
370 struct tree *merge)
9047ebbc
MV
371{
372 int rc;
373 struct tree_desc t[3];
a35edc84 374 struct index_state tmp_index = { NULL };
9047ebbc 375
259ccb6c
EN
376 memset(&opt->unpack_opts, 0, sizeof(opt->unpack_opts));
377 if (opt->call_depth)
378 opt->unpack_opts.index_only = 1;
9047ebbc 379 else
259ccb6c
EN
380 opt->unpack_opts.update = 1;
381 opt->unpack_opts.merge = 1;
382 opt->unpack_opts.head_idx = 2;
383 opt->unpack_opts.fn = threeway_merge;
384 opt->unpack_opts.src_index = opt->repo->index;
385 opt->unpack_opts.dst_index = &tmp_index;
386 opt->unpack_opts.aggressive = !merge_detect_rename(opt);
387 setup_unpack_trees_porcelain(&opt->unpack_opts, "merge");
9047ebbc
MV
388
389 init_tree_desc_from_tree(t+0, common);
390 init_tree_desc_from_tree(t+1, head);
391 init_tree_desc_from_tree(t+2, merge);
392
259ccb6c
EN
393 rc = unpack_trees(3, t, &opt->unpack_opts);
394 cache_tree_free(&opt->repo->index->cache_tree);
a35edc84 395
64b1abe9 396 /*
259ccb6c
EN
397 * Update opt->repo->index to match the new results, AFTER saving a copy
398 * in opt->orig_index. Update src_index to point to the saved copy.
a35edc84
EN
399 * (verify_uptodate() checks src_index, and the original index is
400 * the one that had the necessary modification timestamps.)
64b1abe9 401 */
259ccb6c
EN
402 opt->orig_index = *opt->repo->index;
403 *opt->repo->index = tmp_index;
404 opt->unpack_opts.src_index = &opt->orig_index;
a35edc84 405
9047ebbc
MV
406 return rc;
407}
408
259ccb6c 409static void unpack_trees_finish(struct merge_options *opt)
3f1c1c36 410{
259ccb6c
EN
411 discard_index(&opt->orig_index);
412 clear_unpack_trees_porcelain(&opt->unpack_opts);
3f1c1c36
EN
413}
414
df46d77e 415static int save_files_dirs(const struct object_id *oid,
d90e759f
EN
416 struct strbuf *base, const char *path,
417 unsigned int mode, int stage, void *context)
9047ebbc 418{
fc65b00d 419 struct path_hashmap_entry *entry;
6a0b0b6d 420 int baselen = base->len;
259ccb6c 421 struct merge_options *opt = context;
696ee23c 422
6a0b0b6d 423 strbuf_addstr(base, path);
9047ebbc 424
fc65b00d
KW
425 FLEX_ALLOC_MEM(entry, path, base->buf, base->len);
426 hashmap_entry_init(entry, path_hash(entry->path));
259ccb6c 427 hashmap_add(&opt->current_file_dir_set, entry);
9047ebbc 428
6a0b0b6d 429 strbuf_setlen(base, baselen);
d3bee161 430 return (S_ISDIR(mode) ? READ_TREE_RECURSIVE : 0);
9047ebbc
MV
431}
432
259ccb6c 433static void get_files_dirs(struct merge_options *opt, struct tree *tree)
9047ebbc 434{
f0096c06 435 struct pathspec match_all;
9a087274 436 memset(&match_all, 0, sizeof(match_all));
34e7771b 437 read_tree_recursive(opt->repo, tree, "", 0, 0,
259ccb6c 438 &match_all, save_files_dirs, opt);
9047ebbc
MV
439}
440
34e7771b
NTND
441static int get_tree_entry_if_blob(struct repository *r,
442 const struct object_id *tree,
5b047ac0 443 const char *path,
8daec1df 444 struct diff_filespec *dfs)
5b047ac0
EN
445{
446 int ret;
447
34e7771b 448 ret = get_tree_entry(r, tree, path, &dfs->oid, &dfs->mode);
8daec1df
EN
449 if (S_ISDIR(dfs->mode)) {
450 oidcpy(&dfs->oid, &null_oid);
451 dfs->mode = 0;
5b047ac0
EN
452 }
453 return ret;
454}
455
9047ebbc
MV
456/*
457 * Returns an index_entry instance which doesn't have to correspond to
458 * a real cache entry in Git's index.
459 */
34e7771b
NTND
460static struct stage_data *insert_stage_data(struct repository *r,
461 const char *path,
9047ebbc
MV
462 struct tree *o, struct tree *a, struct tree *b,
463 struct string_list *entries)
464{
465 struct string_list_item *item;
466 struct stage_data *e = xcalloc(1, sizeof(struct stage_data));
34e7771b
NTND
467 get_tree_entry_if_blob(r, &o->object.oid, path, &e->stages[1]);
468 get_tree_entry_if_blob(r, &a->object.oid, path, &e->stages[2]);
469 get_tree_entry_if_blob(r, &b->object.oid, path, &e->stages[3]);
78a395d3 470 item = string_list_insert(entries, path);
9047ebbc
MV
471 item->util = e;
472 return e;
473}
474
475/*
476 * Create a dictionary mapping file names to stage_data objects. The
477 * dictionary contains one entry for every path with a non-zero stage entry.
478 */
0d6caa2d 479static struct string_list *get_unmerged(struct index_state *istate)
9047ebbc
MV
480{
481 struct string_list *unmerged = xcalloc(1, sizeof(struct string_list));
482 int i;
483
484 unmerged->strdup_strings = 1;
485
0d6caa2d 486 for (i = 0; i < istate->cache_nr; i++) {
9047ebbc
MV
487 struct string_list_item *item;
488 struct stage_data *e;
0d6caa2d 489 const struct cache_entry *ce = istate->cache[i];
9047ebbc
MV
490 if (!ce_stage(ce))
491 continue;
492
e8c8b713 493 item = string_list_lookup(unmerged, ce->name);
9047ebbc 494 if (!item) {
78a395d3 495 item = string_list_insert(unmerged, ce->name);
9047ebbc
MV
496 item->util = xcalloc(1, sizeof(struct stage_data));
497 }
498 e = item->util;
499 e->stages[ce_stage(ce)].mode = ce->ce_mode;
99d1a986 500 oidcpy(&e->stages[ce_stage(ce)].oid, &ce->oid);
9047ebbc
MV
501 }
502
503 return unmerged;
504}
505
fa6ca111 506static int string_list_df_name_compare(const char *one, const char *two)
ef02b317 507{
fa6ca111
NTND
508 int onelen = strlen(one);
509 int twolen = strlen(two);
f0fd4d05
EN
510 /*
511 * Here we only care that entries for D/F conflicts are
512 * adjacent, in particular with the file of the D/F conflict
513 * appearing before files below the corresponding directory.
514 * The order of the rest of the list is irrelevant for us.
ef02b317 515 *
f0fd4d05
EN
516 * To achieve this, we sort with df_name_compare and provide
517 * the mode S_IFDIR so that D/F conflicts will sort correctly.
518 * We use the mode S_IFDIR for everything else for simplicity,
519 * since in other cases any changes in their order due to
520 * sorting cause no problems for us.
521 */
fa6ca111
NTND
522 int cmp = df_name_compare(one, onelen, S_IFDIR,
523 two, twolen, S_IFDIR);
f0fd4d05
EN
524 /*
525 * Now that 'foo' and 'foo/bar' compare equal, we have to make sure
526 * that 'foo' comes before 'foo/bar'.
ef02b317 527 */
f0fd4d05
EN
528 if (cmp)
529 return cmp;
530 return onelen - twolen;
531}
532
259ccb6c 533static void record_df_conflict_files(struct merge_options *opt,
70cc3d36 534 struct string_list *entries)
ef02b317 535{
70cc3d36 536 /* If there is a D/F conflict and the file for such a conflict
2d6bad91 537 * currently exists in the working tree, we want to allow it to be
edd2faf5
EN
538 * removed to make room for the corresponding directory if needed.
539 * The files underneath the directories of such D/F conflicts will
540 * be processed before the corresponding file involved in the D/F
541 * conflict. If the D/F directory ends up being removed by the
542 * merge, then we won't have to touch the D/F file. If the D/F
543 * directory needs to be written to the working copy, then the D/F
544 * file will simply be removed (in make_room_for_path()) to make
545 * room for the necessary paths. Note that if both the directory
546 * and the file need to be present, then the D/F file will be
547 * reinstated with a new unique name at the time it is processed.
ef02b317 548 */
af4941d4 549 struct string_list df_sorted_entries = STRING_LIST_INIT_NODUP;
ef02b317 550 const char *last_file = NULL;
c8516500 551 int last_len = 0;
ef02b317
EN
552 int i;
553
0b30e812
EN
554 /*
555 * If we're merging merge-bases, we don't want to bother with
556 * any working directory changes.
557 */
259ccb6c 558 if (opt->call_depth)
0b30e812
EN
559 return;
560
f0fd4d05 561 /* Ensure D/F conflicts are adjacent in the entries list. */
ef02b317 562 for (i = 0; i < entries->nr; i++) {
f701aae0
EN
563 struct string_list_item *next = &entries->items[i];
564 string_list_append(&df_sorted_entries, next->string)->util =
565 next->util;
566 }
fa6ca111
NTND
567 df_sorted_entries.cmp = string_list_df_name_compare;
568 string_list_sort(&df_sorted_entries);
f0fd4d05 569
259ccb6c 570 string_list_clear(&opt->df_conflict_file_set, 1);
f701aae0
EN
571 for (i = 0; i < df_sorted_entries.nr; i++) {
572 const char *path = df_sorted_entries.items[i].string;
ef02b317 573 int len = strlen(path);
f701aae0 574 struct stage_data *e = df_sorted_entries.items[i].util;
ef02b317
EN
575
576 /*
577 * Check if last_file & path correspond to a D/F conflict;
578 * i.e. whether path is last_file+'/'+<something>.
70cc3d36
EN
579 * If so, record that it's okay to remove last_file to make
580 * room for path and friends if needed.
ef02b317
EN
581 */
582 if (last_file &&
583 len > last_len &&
584 memcmp(path, last_file, last_len) == 0 &&
585 path[last_len] == '/') {
259ccb6c 586 string_list_insert(&opt->df_conflict_file_set, last_file);
ef02b317
EN
587 }
588
589 /*
590 * Determine whether path could exist as a file in the
591 * working directory as a possible D/F conflict. This
592 * will only occur when it exists in stage 2 as a
593 * file.
594 */
595 if (S_ISREG(e->stages[2].mode) || S_ISLNK(e->stages[2].mode)) {
596 last_file = path;
597 last_len = len;
ef02b317
EN
598 } else {
599 last_file = NULL;
600 }
601 }
f701aae0 602 string_list_clear(&df_sorted_entries, 0);
ef02b317
EN
603}
604
bc9204d4
JS
605static int update_stages(struct merge_options *opt, const char *path,
606 const struct diff_filespec *o,
650467cf
EN
607 const struct diff_filespec *a,
608 const struct diff_filespec *b)
9047ebbc 609{
f53d3977
EN
610
611 /*
612 * NOTE: It is usually a bad idea to call update_stages on a path
613 * before calling update_file on that same path, since it can
614 * sometimes lead to spurious "refusing to lose untracked file..."
615 * messages from update_file (via make_room_for path via
616 * would_lose_untracked). Instead, reverse the order of the calls
617 * (executing update_file first and then update_stages).
618 */
650467cf
EN
619 int clear = 1;
620 int options = ADD_CACHE_OK_TO_ADD | ADD_CACHE_SKIP_DFCHECK;
9047ebbc 621 if (clear)
0d6caa2d 622 if (remove_file_from_index(opt->repo->index, path))
9047ebbc
MV
623 return -1;
624 if (o)
8daec1df 625 if (add_cacheinfo(opt, o, path, 1, 0, options))
9047ebbc
MV
626 return -1;
627 if (a)
8daec1df 628 if (add_cacheinfo(opt, a, path, 2, 0, options))
9047ebbc
MV
629 return -1;
630 if (b)
8daec1df 631 if (add_cacheinfo(opt, b, path, 3, 0, options))
9047ebbc
MV
632 return -1;
633 return 0;
634}
635
b8ddf164
EN
636static void update_entry(struct stage_data *entry,
637 struct diff_filespec *o,
638 struct diff_filespec *a,
639 struct diff_filespec *b)
2ff739f9 640{
2ff739f9
EN
641 entry->processed = 0;
642 entry->stages[1].mode = o->mode;
643 entry->stages[2].mode = a->mode;
644 entry->stages[3].mode = b->mode;
fd429e98 645 oidcpy(&entry->stages[1].oid, &o->oid);
646 oidcpy(&entry->stages[2].oid, &a->oid);
647 oidcpy(&entry->stages[3].oid, &b->oid);
2ff739f9
EN
648}
649
259ccb6c 650static int remove_file(struct merge_options *opt, int clean,
b7fa51da 651 const char *path, int no_wd)
9047ebbc 652{
259ccb6c
EN
653 int update_cache = opt->call_depth || clean;
654 int update_working_directory = !opt->call_depth && !no_wd;
9047ebbc
MV
655
656 if (update_cache) {
259ccb6c 657 if (remove_file_from_index(opt->repo->index, path))
9047ebbc
MV
658 return -1;
659 }
660 if (update_working_directory) {
ae352c7f
DT
661 if (ignore_case) {
662 struct cache_entry *ce;
259ccb6c 663 ce = index_file_exists(opt->repo->index, path, strlen(path),
0d6caa2d 664 ignore_case);
4cba2b01 665 if (ce && ce_stage(ce) == 0 && strcmp(path, ce->name))
ae352c7f
DT
666 return 0;
667 }
25755e84 668 if (remove_path(path))
9047ebbc 669 return -1;
9047ebbc
MV
670 }
671 return 0;
672}
673
45bc131d
JK
674/* add a string to a strbuf, but converting "/" to "_" */
675static void add_flattened_path(struct strbuf *out, const char *s)
676{
677 size_t i = out->len;
678 strbuf_addstr(out, s);
679 for (; i < out->len; i++)
680 if (out->buf[i] == '/')
681 out->buf[i] = '_';
682}
683
4d7101e2
EN
684static char *unique_path(struct merge_options *opt,
685 const char *path,
686 const char *branch)
9047ebbc 687{
fc65b00d 688 struct path_hashmap_entry *entry;
45bc131d 689 struct strbuf newpath = STRBUF_INIT;
9047ebbc 690 int suffix = 0;
45bc131d
JK
691 size_t base_len;
692
693 strbuf_addf(&newpath, "%s~", path);
694 add_flattened_path(&newpath, branch);
695
696 base_len = newpath.len;
259ccb6c 697 while (hashmap_get_from_hash(&opt->current_file_dir_set,
fc65b00d 698 path_hash(newpath.buf), newpath.buf) ||
259ccb6c 699 (!opt->call_depth && file_exists(newpath.buf))) {
45bc131d
JK
700 strbuf_setlen(&newpath, base_len);
701 strbuf_addf(&newpath, "_%d", suffix++);
702 }
703
fc65b00d
KW
704 FLEX_ALLOC_MEM(entry, path, newpath.buf, newpath.len);
705 hashmap_entry_init(entry, path_hash(entry->path));
259ccb6c 706 hashmap_add(&opt->current_file_dir_set, entry);
45bc131d 707 return strbuf_detach(&newpath, NULL);
9047ebbc
MV
708}
709
5423d2e7
DT
710/**
711 * Check whether a directory in the index is in the way of an incoming
712 * file. Return 1 if so. If check_working_copy is non-zero, also
713 * check the working directory. If empty_ok is non-zero, also return
714 * 0 in the case where the working-tree dir exists but is empty.
715 */
0d6caa2d
NTND
716static int dir_in_way(struct index_state *istate, const char *path,
717 int check_working_copy, int empty_ok)
f2507b4e 718{
b4600fbe
JK
719 int pos;
720 struct strbuf dirpath = STRBUF_INIT;
f2507b4e
EN
721 struct stat st;
722
b4600fbe
JK
723 strbuf_addstr(&dirpath, path);
724 strbuf_addch(&dirpath, '/');
f2507b4e 725
0d6caa2d 726 pos = index_name_pos(istate, dirpath.buf, dirpath.len);
f2507b4e
EN
727
728 if (pos < 0)
729 pos = -1 - pos;
0d6caa2d
NTND
730 if (pos < istate->cache_nr &&
731 !strncmp(dirpath.buf, istate->cache[pos]->name, dirpath.len)) {
b4600fbe 732 strbuf_release(&dirpath);
f2507b4e
EN
733 return 1;
734 }
735
b4600fbe 736 strbuf_release(&dirpath);
5423d2e7
DT
737 return check_working_copy && !lstat(path, &st) && S_ISDIR(st.st_mode) &&
738 !(empty_ok && is_empty_dir(path));
f2507b4e
EN
739}
740
1de70dbd
EN
741/*
742 * Returns whether path was tracked in the index before the merge started,
743 * and its oid and mode match the specified values
744 */
259ccb6c 745static int was_tracked_and_matches(struct merge_options *opt, const char *path,
8daec1df 746 const struct diff_filespec *blob)
60c91181 747{
259ccb6c 748 int pos = index_name_pos(&opt->orig_index, path, strlen(path));
1de70dbd
EN
749 struct cache_entry *ce;
750
751 if (0 > pos)
752 /* we were not tracking this path before the merge */
753 return 0;
754
755 /* See if the file we were tracking before matches */
259ccb6c 756 ce = opt->orig_index.cache[pos];
8daec1df 757 return (oid_eq(&ce->oid, &blob->oid) && ce->ce_mode == blob->mode);
1de70dbd
EN
758}
759
a35edc84
EN
760/*
761 * Returns whether path was tracked in the index before the merge started
762 */
259ccb6c 763static int was_tracked(struct merge_options *opt, const char *path)
60c91181 764{
259ccb6c 765 int pos = index_name_pos(&opt->orig_index, path, strlen(path));
60c91181 766
f8d83fb6 767 if (0 <= pos)
a35edc84 768 /* we were tracking this path before the merge */
f8d83fb6
JS
769 return 1;
770
aacb82de 771 return 0;
60c91181
JH
772}
773
259ccb6c 774static int would_lose_untracked(struct merge_options *opt, const char *path)
9047ebbc 775{
259ccb6c 776 struct index_state *istate = opt->repo->index;
0d6caa2d 777
a35edc84
EN
778 /*
779 * This may look like it can be simplified to:
259ccb6c 780 * return !was_tracked(opt, path) && file_exists(path)
a35edc84
EN
781 * but it can't. This function needs to know whether path was in
782 * the working tree due to EITHER having been tracked in the index
783 * before the merge OR having been put into the working copy and
784 * index by unpack_trees(). Due to that either-or requirement, we
785 * check the current index instead of the original one.
786 *
787 * Note that we do not need to worry about merge-recursive itself
788 * updating the index after unpack_trees() and before calling this
789 * function, because we strictly require all code paths in
790 * merge-recursive to update the working tree first and the index
791 * second. Doing otherwise would break
792 * update_file()/would_lose_untracked(); see every comment in this
793 * file which mentions "update_stages".
794 */
0d6caa2d 795 int pos = index_name_pos(istate, path, strlen(path));
a35edc84
EN
796
797 if (pos < 0)
798 pos = -1 - pos;
0d6caa2d
NTND
799 while (pos < istate->cache_nr &&
800 !strcmp(path, istate->cache[pos]->name)) {
a35edc84
EN
801 /*
802 * If stage #0, it is definitely tracked.
803 * If it has stage #2 then it was tracked
804 * before this merge started. All other
805 * cases the path was not tracked.
806 */
0d6caa2d 807 switch (ce_stage(istate->cache[pos])) {
a35edc84
EN
808 case 0:
809 case 2:
810 return 0;
811 }
812 pos++;
813 }
814 return file_exists(path);
60c91181
JH
815}
816
259ccb6c 817static int was_dirty(struct merge_options *opt, const char *path)
64b1abe9
EN
818{
819 struct cache_entry *ce;
820 int dirty = 1;
821
259ccb6c 822 if (opt->call_depth || !was_tracked(opt, path))
64b1abe9
EN
823 return !dirty;
824
259ccb6c 825 ce = index_file_exists(opt->unpack_opts.src_index,
277292d5 826 path, strlen(path), ignore_case);
259ccb6c 827 dirty = verify_uptodate(ce, &opt->unpack_opts) != 0;
64b1abe9 828 return dirty;
60c91181
JH
829}
830
259ccb6c 831static int make_room_for_path(struct merge_options *opt, const char *path)
9047ebbc 832{
ed0148a5 833 int status, i;
55653a68 834 const char *msg = _("failed to create path '%s'%s");
9047ebbc 835
ed0148a5 836 /* Unlink any D/F conflict files that are in the way */
259ccb6c
EN
837 for (i = 0; i < opt->df_conflict_file_set.nr; i++) {
838 const char *df_path = opt->df_conflict_file_set.items[i].string;
ed0148a5
EN
839 size_t pathlen = strlen(path);
840 size_t df_pathlen = strlen(df_path);
841 if (df_pathlen < pathlen &&
842 path[df_pathlen] == '/' &&
843 strncmp(path, df_path, df_pathlen) == 0) {
259ccb6c 844 output(opt, 3,
55653a68 845 _("Removing %s to make room for subdirectory\n"),
ed0148a5
EN
846 df_path);
847 unlink(df_path);
259ccb6c 848 unsorted_string_list_delete_item(&opt->df_conflict_file_set,
ed0148a5
EN
849 i, 0);
850 break;
851 }
852 }
853
854 /* Make sure leading directories are created */
9047ebbc
MV
855 status = safe_create_leading_directories_const(path);
856 if (status) {
6003303a 857 if (status == SCLD_EXISTS)
9047ebbc 858 /* something else exists */
259ccb6c
EN
859 return err(opt, msg, path, _(": perhaps a D/F conflict?"));
860 return err(opt, msg, path, "");
9047ebbc
MV
861 }
862
60c91181
JH
863 /*
864 * Do not unlink a file in the work tree if we are not
865 * tracking it.
866 */
259ccb6c
EN
867 if (would_lose_untracked(opt, path))
868 return err(opt, _("refusing to lose untracked file at '%s'"),
d90e759f 869 path);
60c91181 870
9047ebbc
MV
871 /* Successful unlink is good.. */
872 if (!unlink(path))
873 return 0;
874 /* .. and so is no existing file */
875 if (errno == ENOENT)
876 return 0;
877 /* .. but not some other error (who really cares what?) */
259ccb6c 878 return err(opt, msg, path, _(": perhaps a D/F conflict?"));
9047ebbc
MV
879}
880
259ccb6c 881static int update_file_flags(struct merge_options *opt,
8daec1df 882 const struct diff_filespec *contents,
75456f96
JS
883 const char *path,
884 int update_cache,
885 int update_wd)
9047ebbc 886{
6003303a
JS
887 int ret = 0;
888
259ccb6c 889 if (opt->call_depth)
9047ebbc
MV
890 update_wd = 0;
891
892 if (update_wd) {
893 enum object_type type;
894 void *buf;
895 unsigned long size;
896
8daec1df 897 if (S_ISGITLINK(contents->mode)) {
0c44c943
JH
898 /*
899 * We may later decide to recursively descend into
900 * the submodule directory and update its index
901 * and/or work tree, but we do not do that now.
902 */
68d03e4a 903 update_wd = 0;
0c44c943 904 goto update_index;
68d03e4a 905 }
9047ebbc 906
8daec1df 907 buf = read_object_file(&contents->oid, &type, &size);
f836bf39
EN
908 if (!buf) {
909 ret = err(opt, _("cannot read object %s '%s'"),
910 oid_to_hex(&contents->oid), path);
911 goto free_buf;
912 }
6003303a 913 if (type != OBJ_BLOB) {
8daec1df
EN
914 ret = err(opt, _("blob expected for %s '%s'"),
915 oid_to_hex(&contents->oid), path);
6003303a
JS
916 goto free_buf;
917 }
8daec1df 918 if (S_ISREG(contents->mode)) {
f285a2d7 919 struct strbuf strbuf = STRBUF_INIT;
4d7101e2
EN
920 if (convert_to_working_tree(opt->repo->index,
921 path, buf, size, &strbuf)) {
9047ebbc
MV
922 free(buf);
923 size = strbuf.len;
924 buf = strbuf_detach(&strbuf, NULL);
925 }
926 }
927
259ccb6c 928 if (make_room_for_path(opt, path) < 0) {
9047ebbc 929 update_wd = 0;
75456f96 930 goto free_buf;
9047ebbc 931 }
8daec1df
EN
932 if (S_ISREG(contents->mode) ||
933 (!has_symlinks && S_ISLNK(contents->mode))) {
9047ebbc 934 int fd;
8daec1df
EN
935 int mode = (contents->mode & 0100 ? 0777 : 0666);
936
9047ebbc 937 fd = open(path, O_WRONLY | O_TRUNC | O_CREAT, mode);
6003303a 938 if (fd < 0) {
259ccb6c 939 ret = err(opt, _("failed to open '%s': %s"),
bc9204d4 940 path, strerror(errno));
6003303a
JS
941 goto free_buf;
942 }
f633ea2c 943 write_in_full(fd, buf, size);
9047ebbc 944 close(fd);
8daec1df 945 } else if (S_ISLNK(contents->mode)) {
9047ebbc
MV
946 char *lnk = xmemdupz(buf, size);
947 safe_create_leading_directories_const(path);
948 unlink(path);
304dcf26 949 if (symlink(lnk, path))
259ccb6c 950 ret = err(opt, _("failed to symlink '%s': %s"),
d90e759f 951 path, strerror(errno));
9047ebbc
MV
952 free(lnk);
953 } else
259ccb6c 954 ret = err(opt,
bc9204d4 955 _("do not know what to do with %06o %s '%s'"),
8daec1df 956 contents->mode, oid_to_hex(&contents->oid), path);
93665365 957 free_buf:
9047ebbc
MV
958 free(buf);
959 }
93665365 960update_index:
6003303a 961 if (!ret && update_cache)
8daec1df 962 if (add_cacheinfo(opt, contents, path, 0, update_wd,
fd53b7ff
EN
963 ADD_CACHE_OK_TO_ADD))
964 return -1;
6003303a 965 return ret;
9047ebbc
MV
966}
967
259ccb6c 968static int update_file(struct merge_options *opt,
75456f96 969 int clean,
8daec1df 970 const struct diff_filespec *contents,
75456f96 971 const char *path)
9047ebbc 972{
8daec1df
EN
973 return update_file_flags(opt, contents, path,
974 opt->call_depth || clean, !opt->call_depth);
9047ebbc
MV
975}
976
977/* Low level file merging, update and removal */
978
9cba13ca 979struct merge_file_info {
8daec1df 980 struct diff_filespec blob; /* mostly use oid & mode; sometimes path */
9047ebbc
MV
981 unsigned clean:1,
982 merge:1;
983};
984
259ccb6c 985static int merge_3way(struct merge_options *opt,
b7fa51da 986 mmbuffer_t *result_buf,
e3de888c 987 const struct diff_filespec *o,
0c059420
EN
988 const struct diff_filespec *a,
989 const struct diff_filespec *b,
9047ebbc 990 const char *branch1,
b2a7942b
EN
991 const char *branch2,
992 const int extra_marker_size)
9047ebbc
MV
993{
994 mmfile_t orig, src1, src2;
712516bc 995 struct ll_merge_options ll_opts = {0};
139ef37a 996 char *base, *name1, *name2;
9047ebbc 997 int merge_status;
8cc5b290 998
259ccb6c 999 ll_opts.renormalize = opt->renormalize;
b2a7942b 1000 ll_opts.extra_marker_size = extra_marker_size;
259ccb6c 1001 ll_opts.xdl_opts = opt->xdl_opts;
712516bc 1002
259ccb6c 1003 if (opt->call_depth) {
712516bc
JN
1004 ll_opts.virtual_ancestor = 1;
1005 ll_opts.variant = 0;
1006 } else {
259ccb6c 1007 switch (opt->recursive_variant) {
8cc5b290 1008 case MERGE_RECURSIVE_OURS:
712516bc 1009 ll_opts.variant = XDL_MERGE_FAVOR_OURS;
8cc5b290
AP
1010 break;
1011 case MERGE_RECURSIVE_THEIRS:
712516bc 1012 ll_opts.variant = XDL_MERGE_FAVOR_THEIRS;
8cc5b290
AP
1013 break;
1014 default:
712516bc 1015 ll_opts.variant = 0;
8cc5b290
AP
1016 break;
1017 }
1018 }
9047ebbc 1019
139ef37a
EN
1020 assert(a->path && b->path && o->path && opt->ancestor);
1021 if (strcmp(a->path, b->path) || strcmp(a->path, o->path) != 0) {
1022 base = mkpathdup("%s:%s", opt->ancestor, o->path);
4e2d094d
RJ
1023 name1 = mkpathdup("%s:%s", branch1, a->path);
1024 name2 = mkpathdup("%s:%s", branch2, b->path);
606475f3 1025 } else {
139ef37a 1026 base = mkpathdup("%s", opt->ancestor);
4e2d094d
RJ
1027 name1 = mkpathdup("%s", branch1);
1028 name2 = mkpathdup("%s", branch2);
606475f3 1029 }
9047ebbc 1030
e3de888c 1031 read_mmblob(&orig, &o->oid);
d449347d 1032 read_mmblob(&src1, &a->oid);
1033 read_mmblob(&src2, &b->oid);
9047ebbc 1034
139ef37a 1035 merge_status = ll_merge(result_buf, a->path, &orig, base,
32eaa468 1036 &src1, name1, &src2, name2,
259ccb6c 1037 opt->repo->index, &ll_opts);
9047ebbc 1038
139ef37a 1039 free(base);
9047ebbc
MV
1040 free(name1);
1041 free(name2);
1042 free(orig.ptr);
1043 free(src1.ptr);
1044 free(src2.ptr);
1045 return merge_status;
1046}
1047
0d6caa2d
NTND
1048static int find_first_merges(struct repository *repo,
1049 struct object_array *result, const char *path,
d90e759f 1050 struct commit *a, struct commit *b)
18cfc088
SB
1051{
1052 int i, j;
1053 struct object_array merges = OBJECT_ARRAY_INIT;
1054 struct commit *commit;
1055 int contains_another;
1056
db1ba2a2 1057 char merged_revision[GIT_MAX_HEXSZ + 2];
18cfc088
SB
1058 const char *rev_args[] = { "rev-list", "--merges", "--ancestry-path",
1059 "--all", merged_revision, NULL };
1060 struct rev_info revs;
1061 struct setup_revision_opt rev_opts;
1062
1063 memset(result, 0, sizeof(struct object_array));
1064 memset(&rev_opts, 0, sizeof(rev_opts));
1065
1066 /* get all revisions that merge commit a */
1067 xsnprintf(merged_revision, sizeof(merged_revision), "^%s",
d90e759f 1068 oid_to_hex(&a->object.oid));
0d6caa2d 1069 repo_init_revisions(repo, &revs, NULL);
18cfc088
SB
1070 rev_opts.submodule = path;
1071 /* FIXME: can't handle linked worktrees in submodules yet */
1072 revs.single_worktree = path != NULL;
1073 setup_revisions(ARRAY_SIZE(rev_args)-1, rev_args, &revs, &rev_opts);
1074
1075 /* save all revisions from the above list that contain b */
1076 if (prepare_revision_walk(&revs))
1077 die("revision walk setup failed");
1078 while ((commit = get_revision(&revs)) != NULL) {
1079 struct object *o = &(commit->object);
1080 if (in_merge_bases(b, commit))
1081 add_object_array(o, NULL, &merges);
1082 }
1083 reset_revision_walk();
1084
1085 /* Now we've got all merges that contain a and b. Prune all
1086 * merges that contain another found merge and save them in
1087 * result.
1088 */
1089 for (i = 0; i < merges.nr; i++) {
1090 struct commit *m1 = (struct commit *) merges.objects[i].item;
1091
1092 contains_another = 0;
1093 for (j = 0; j < merges.nr; j++) {
1094 struct commit *m2 = (struct commit *) merges.objects[j].item;
1095 if (i != j && in_merge_bases(m2, m1)) {
1096 contains_another = 1;
1097 break;
1098 }
1099 }
1100
1101 if (!contains_another)
1102 add_object_array(merges.objects[i].item, NULL, result);
1103 }
1104
1105 object_array_clear(&merges);
1106 return result->nr;
1107}
1108
1109static void print_commit(struct commit *commit)
1110{
1111 struct strbuf sb = STRBUF_INIT;
1112 struct pretty_print_context ctx = {0};
1113 ctx.date_mode.type = DATE_NORMAL;
1114 format_commit_message(commit, " %h: %m %s", &sb, &ctx);
1115 fprintf(stderr, "%s\n", sb.buf);
1116 strbuf_release(&sb);
1117}
1118
8daec1df
EN
1119static int is_valid(const struct diff_filespec *dfs)
1120{
1121 return dfs->mode != 0 && !is_null_oid(&dfs->oid);
1122}
1123
259ccb6c 1124static int merge_submodule(struct merge_options *opt,
325f3a8e 1125 struct object_id *result, const char *path,
18cfc088 1126 const struct object_id *base, const struct object_id *a,
325f3a8e 1127 const struct object_id *b)
18cfc088
SB
1128{
1129 struct commit *commit_base, *commit_a, *commit_b;
1130 int parent_count;
1131 struct object_array merges;
1132
1133 int i;
259ccb6c 1134 int search = !opt->call_depth;
18cfc088
SB
1135
1136 /* store a in result in case we fail */
1137 oidcpy(result, a);
1138
1139 /* we can not handle deletion conflicts */
1140 if (is_null_oid(base))
1141 return 0;
1142 if (is_null_oid(a))
1143 return 0;
1144 if (is_null_oid(b))
1145 return 0;
1146
1147 if (add_submodule_odb(path)) {
259ccb6c 1148 output(opt, 1, _("Failed to merge submodule %s (not checked out)"), path);
18cfc088
SB
1149 return 0;
1150 }
1151
259ccb6c
EN
1152 if (!(commit_base = lookup_commit_reference(opt->repo, base)) ||
1153 !(commit_a = lookup_commit_reference(opt->repo, a)) ||
1154 !(commit_b = lookup_commit_reference(opt->repo, b))) {
1155 output(opt, 1, _("Failed to merge submodule %s (commits not present)"), path);
18cfc088
SB
1156 return 0;
1157 }
1158
1159 /* check whether both changes are forward */
1160 if (!in_merge_bases(commit_base, commit_a) ||
1161 !in_merge_bases(commit_base, commit_b)) {
259ccb6c 1162 output(opt, 1, _("Failed to merge submodule %s (commits don't follow merge-base)"), path);
18cfc088
SB
1163 return 0;
1164 }
1165
1166 /* Case #1: a is contained in b or vice versa */
1167 if (in_merge_bases(commit_a, commit_b)) {
1168 oidcpy(result, b);
259ccb6c
EN
1169 if (show(opt, 3)) {
1170 output(opt, 3, _("Fast-forwarding submodule %s to the following commit:"), path);
1171 output_commit_title(opt, commit_b);
1172 } else if (show(opt, 2))
1173 output(opt, 2, _("Fast-forwarding submodule %s"), path);
76f42125
LM
1174 else
1175 ; /* no output */
1176
18cfc088
SB
1177 return 1;
1178 }
1179 if (in_merge_bases(commit_b, commit_a)) {
1180 oidcpy(result, a);
259ccb6c
EN
1181 if (show(opt, 3)) {
1182 output(opt, 3, _("Fast-forwarding submodule %s to the following commit:"), path);
1183 output_commit_title(opt, commit_a);
1184 } else if (show(opt, 2))
1185 output(opt, 2, _("Fast-forwarding submodule %s"), path);
76f42125
LM
1186 else
1187 ; /* no output */
1188
18cfc088
SB
1189 return 1;
1190 }
1191
1192 /*
1193 * Case #2: There are one or more merges that contain a and b in
1194 * the submodule. If there is only one, then present it as a
1195 * suggestion to the user, but leave it marked unmerged so the
1196 * user needs to confirm the resolution.
1197 */
1198
1199 /* Skip the search if makes no sense to the calling context. */
1200 if (!search)
1201 return 0;
1202
1203 /* find commit which merges them */
259ccb6c 1204 parent_count = find_first_merges(opt->repo, &merges, path,
0d6caa2d 1205 commit_a, commit_b);
18cfc088
SB
1206 switch (parent_count) {
1207 case 0:
259ccb6c 1208 output(opt, 1, _("Failed to merge submodule %s (merge following commits not found)"), path);
18cfc088
SB
1209 break;
1210
1211 case 1:
259ccb6c
EN
1212 output(opt, 1, _("Failed to merge submodule %s (not fast-forward)"), path);
1213 output(opt, 2, _("Found a possible merge resolution for the submodule:\n"));
18cfc088 1214 print_commit((struct commit *) merges.objects[0].item);
259ccb6c 1215 output(opt, 2, _(
d90e759f
EN
1216 "If this is correct simply add it to the index "
1217 "for example\n"
1218 "by using:\n\n"
1219 " git update-index --cacheinfo 160000 %s \"%s\"\n\n"
1220 "which will accept this suggestion.\n"),
1221 oid_to_hex(&merges.objects[0].item->oid), path);
18cfc088
SB
1222 break;
1223
1224 default:
259ccb6c 1225 output(opt, 1, _("Failed to merge submodule %s (multiple merges found)"), path);
18cfc088
SB
1226 for (i = 0; i < merges.nr; i++)
1227 print_commit((struct commit *) merges.objects[i].item);
1228 }
1229
1230 object_array_clear(&merges);
1231 return 0;
1232}
1233
259ccb6c 1234static int merge_mode_and_contents(struct merge_options *opt,
e3de888c 1235 const struct diff_filespec *o,
d9573556
EN
1236 const struct diff_filespec *a,
1237 const struct diff_filespec *b,
1238 const char *filename,
1239 const char *branch1,
1240 const char *branch2,
b2a7942b 1241 const int extra_marker_size,
d9573556 1242 struct merge_file_info *result)
9047ebbc 1243{
259ccb6c 1244 if (opt->branch1 != branch1) {
4f445453
EN
1245 /*
1246 * It's weird getting a reverse merge with HEAD on the bottom
1247 * side of the conflict markers and the other branch on the
1248 * top. Fix that.
1249 */
e3de888c 1250 return merge_mode_and_contents(opt, o, b, a,
4f445453 1251 filename,
b2a7942b
EN
1252 branch2, branch1,
1253 extra_marker_size, result);
4f445453
EN
1254 }
1255
3c8a51e8
JS
1256 result->merge = 0;
1257 result->clean = 1;
9047ebbc
MV
1258
1259 if ((S_IFMT & a->mode) != (S_IFMT & b->mode)) {
3c8a51e8 1260 result->clean = 0;
9047ebbc 1261 if (S_ISREG(a->mode)) {
8daec1df
EN
1262 result->blob.mode = a->mode;
1263 oidcpy(&result->blob.oid, &a->oid);
9047ebbc 1264 } else {
8daec1df
EN
1265 result->blob.mode = b->mode;
1266 oidcpy(&result->blob.oid, &b->oid);
9047ebbc
MV
1267 }
1268 } else {
e3de888c 1269 if (!oid_eq(&a->oid, &o->oid) && !oid_eq(&b->oid, &o->oid))
3c8a51e8 1270 result->merge = 1;
9047ebbc
MV
1271
1272 /*
1273 * Merge modes
1274 */
e3de888c 1275 if (a->mode == b->mode || a->mode == o->mode)
8daec1df 1276 result->blob.mode = b->mode;
9047ebbc 1277 else {
8daec1df 1278 result->blob.mode = a->mode;
e3de888c 1279 if (b->mode != o->mode) {
3c8a51e8
JS
1280 result->clean = 0;
1281 result->merge = 1;
9047ebbc
MV
1282 }
1283 }
1284
e3de888c 1285 if (oid_eq(&a->oid, &b->oid) || oid_eq(&a->oid, &o->oid))
8daec1df 1286 oidcpy(&result->blob.oid, &b->oid);
e3de888c 1287 else if (oid_eq(&b->oid, &o->oid))
8daec1df 1288 oidcpy(&result->blob.oid, &a->oid);
9047ebbc
MV
1289 else if (S_ISREG(a->mode)) {
1290 mmbuffer_t result_buf;
6003303a 1291 int ret = 0, merge_status;
9047ebbc 1292
e3de888c 1293 merge_status = merge_3way(opt, &result_buf, o, a, b,
b2a7942b
EN
1294 branch1, branch2,
1295 extra_marker_size);
9047ebbc
MV
1296
1297 if ((merge_status < 0) || !result_buf.ptr)
259ccb6c 1298 ret = err(opt, _("Failed to execute internal merge"));
9047ebbc 1299
a09c985e
PO
1300 if (!ret &&
1301 write_object_file(result_buf.ptr, result_buf.size,
8daec1df 1302 blob_type, &result->blob.oid))
259ccb6c 1303 ret = err(opt, _("Unable to add %s to database"),
bc9204d4 1304 a->path);
9047ebbc
MV
1305
1306 free(result_buf.ptr);
6003303a
JS
1307 if (ret)
1308 return ret;
3c8a51e8 1309 result->clean = (merge_status == 0);
9047ebbc 1310 } else if (S_ISGITLINK(a->mode)) {
8daec1df 1311 result->clean = merge_submodule(opt, &result->blob.oid,
e3de888c
EN
1312 o->path,
1313 &o->oid,
d90e759f
EN
1314 &a->oid,
1315 &b->oid);
9047ebbc 1316 } else if (S_ISLNK(a->mode)) {
259ccb6c 1317 switch (opt->recursive_variant) {
fd48b464 1318 case MERGE_RECURSIVE_NORMAL:
8daec1df 1319 oidcpy(&result->blob.oid, &a->oid);
fd48b464
JH
1320 if (!oid_eq(&a->oid, &b->oid))
1321 result->clean = 0;
1322 break;
1323 case MERGE_RECURSIVE_OURS:
8daec1df 1324 oidcpy(&result->blob.oid, &a->oid);
fd48b464
JH
1325 break;
1326 case MERGE_RECURSIVE_THEIRS:
8daec1df 1327 oidcpy(&result->blob.oid, &b->oid);
fd48b464
JH
1328 break;
1329 }
ef1177d1 1330 } else
033abf97 1331 BUG("unsupported object type in the tree");
9047ebbc
MV
1332 }
1333
05cf21eb 1334 if (result->merge)
259ccb6c 1335 output(opt, 2, _("Auto-merging %s"), filename);
05cf21eb 1336
3c8a51e8 1337 return 0;
9047ebbc
MV
1338}
1339
259ccb6c 1340static int handle_rename_via_dir(struct merge_options *opt,
e2d563df 1341 struct rename_conflict_info *ci)
9c0743fe 1342{
5455c338
EN
1343 /*
1344 * Handle file adds that need to be renamed due to directory rename
1345 * detection. This differs from handle_rename_normal, because
1346 * there is no content merge to do; just move the file into the
1347 * desired final location.
1348 */
e2d563df
EN
1349 const struct rename *ren = ci->ren1;
1350 const struct diff_filespec *dest = ren->pair->two;
8c8e5bd6 1351 char *file_path = dest->path;
8e012516
DS
1352 int mark_conflicted = (opt->detect_directory_renames ==
1353 MERGE_DIRECTORY_RENAMES_CONFLICT);
8c8e5bd6 1354 assert(ren->dir_rename_original_dest);
9c0743fe 1355
259ccb6c 1356 if (!opt->call_depth && would_lose_untracked(opt, dest->path)) {
8c8e5bd6
EN
1357 mark_conflicted = 1;
1358 file_path = unique_path(opt, dest->path, ren->branch);
259ccb6c 1359 output(opt, 1, _("Error: Refusing to lose untracked file at %s; "
8c8e5bd6
EN
1360 "writing to %s instead."),
1361 dest->path, file_path);
1362 }
79c47598 1363
8c8e5bd6 1364 if (mark_conflicted) {
79c47598 1365 /*
8c8e5bd6
EN
1366 * Write the file in worktree at file_path. In the index,
1367 * only record the file at dest->path in the appropriate
1368 * higher stage.
79c47598 1369 */
8c8e5bd6 1370 if (update_file(opt, 0, dest, file_path))
79c47598 1371 return -1;
8c8e5bd6
EN
1372 if (file_path != dest->path)
1373 free(file_path);
1374 if (update_stages(opt, dest->path, NULL,
1375 ren->branch == opt->branch1 ? dest : NULL,
1376 ren->branch == opt->branch1 ? NULL : dest))
1377 return -1;
1378 return 0; /* not clean, but conflicted */
1379 } else {
1380 /* Update dest->path both in index and in worktree */
1381 if (update_file(opt, 1, dest, dest->path))
1382 return -1;
1383 return 1; /* clean */
79c47598 1384 }
6bdaead1
EN
1385}
1386
259ccb6c 1387static int handle_change_delete(struct merge_options *opt,
d90e759f 1388 const char *path, const char *old_path,
8daec1df
EN
1389 const struct diff_filespec *o,
1390 const struct diff_filespec *changed,
d90e759f
EN
1391 const char *change_branch,
1392 const char *delete_branch,
1393 const char *change, const char *change_past)
b7033252 1394{
b26d87f2
MM
1395 char *alt_path = NULL;
1396 const char *update_path = path;
75456f96 1397 int ret = 0;
b26d87f2 1398
259ccb6c
EN
1399 if (dir_in_way(opt->repo->index, path, !opt->call_depth, 0) ||
1400 (!opt->call_depth && would_lose_untracked(opt, path))) {
1401 update_path = alt_path = unique_path(opt, path, change_branch);
b7033252
EN
1402 }
1403
259ccb6c 1404 if (opt->call_depth) {
b7033252
EN
1405 /*
1406 * We cannot arbitrarily accept either a_sha or b_sha as
1407 * correct; since there is no true "middle point" between
1408 * them, simply reuse the base version for virtual merge base.
1409 */
259ccb6c 1410 ret = remove_file_from_index(opt->repo->index, path);
75456f96 1411 if (!ret)
8daec1df 1412 ret = update_file(opt, 0, o, update_path);
b7033252 1413 } else {
5b26c3c9
EN
1414 /*
1415 * Despite the four nearly duplicate messages and argument
1416 * lists below and the ugliness of the nested if-statements,
1417 * having complete messages makes the job easier for
1418 * translators.
1419 *
1420 * The slight variance among the cases is due to the fact
1421 * that:
1422 * 1) directory/file conflicts (in effect if
1423 * !alt_path) could cause us to need to write the
1424 * file to a different path.
1425 * 2) renames (in effect if !old_path) could mean that
1426 * there are two names for the path that the user
1427 * may know the file by.
1428 */
b26d87f2
MM
1429 if (!alt_path) {
1430 if (!old_path) {
259ccb6c 1431 output(opt, 1, _("CONFLICT (%s/delete): %s deleted in %s "
b26d87f2
MM
1432 "and %s in %s. Version %s of %s left in tree."),
1433 change, path, delete_branch, change_past,
1434 change_branch, change_branch, path);
1435 } else {
259ccb6c 1436 output(opt, 1, _("CONFLICT (%s/delete): %s deleted in %s "
b26d87f2
MM
1437 "and %s to %s in %s. Version %s of %s left in tree."),
1438 change, old_path, delete_branch, change_past, path,
1439 change_branch, change_branch, path);
1440 }
55653a68 1441 } else {
b26d87f2 1442 if (!old_path) {
259ccb6c 1443 output(opt, 1, _("CONFLICT (%s/delete): %s deleted in %s "
b26d87f2
MM
1444 "and %s in %s. Version %s of %s left in tree at %s."),
1445 change, path, delete_branch, change_past,
1446 change_branch, change_branch, path, alt_path);
1447 } else {
259ccb6c 1448 output(opt, 1, _("CONFLICT (%s/delete): %s deleted in %s "
b26d87f2
MM
1449 "and %s to %s in %s. Version %s of %s left in tree at %s."),
1450 change, old_path, delete_branch, change_past, path,
1451 change_branch, change_branch, path, alt_path);
1452 }
55653a68 1453 }
35a74abf 1454 /*
b26d87f2 1455 * No need to call update_file() on path when change_branch ==
259ccb6c 1456 * opt->branch1 && !alt_path, since that would needlessly touch
b26d87f2
MM
1457 * path. We could call update_file_flags() with update_cache=0
1458 * and update_wd=0, but that's a no-op.
35a74abf 1459 */
259ccb6c 1460 if (change_branch != opt->branch1 || alt_path)
8daec1df 1461 ret = update_file(opt, 0, changed, update_path);
b7033252 1462 }
b26d87f2 1463 free(alt_path);
75456f96
JS
1464
1465 return ret;
b7033252
EN
1466}
1467
259ccb6c 1468static int handle_rename_delete(struct merge_options *opt,
e2d563df 1469 struct rename_conflict_info *ci)
9047ebbc 1470{
e2d563df
EN
1471 const struct rename *ren = ci->ren1;
1472 const struct diff_filespec *orig = ren->pair->one;
1473 const struct diff_filespec *dest = ren->pair->two;
1474 const char *rename_branch = ren->branch;
1475 const char *delete_branch = (opt->branch1 == ren->branch ?
1476 opt->branch2 : opt->branch1);
6ef2cb00 1477
259ccb6c
EN
1478 if (handle_change_delete(opt,
1479 opt->call_depth ? orig->path : dest->path,
1480 opt->call_depth ? NULL : orig->path,
8daec1df 1481 orig, dest,
b26d87f2 1482 rename_branch, delete_branch,
75456f96
JS
1483 _("rename"), _("renamed")))
1484 return -1;
e03acb8b 1485
259ccb6c
EN
1486 if (opt->call_depth)
1487 return remove_file_from_index(opt->repo->index, dest->path);
75456f96 1488 else
259ccb6c
EN
1489 return update_stages(opt, dest->path, NULL,
1490 rename_branch == opt->branch1 ? dest : NULL,
1491 rename_branch == opt->branch1 ? NULL : dest);
6ef2cb00
EN
1492}
1493
259ccb6c 1494static int handle_file_collision(struct merge_options *opt,
37b65ce3
EN
1495 const char *collide_path,
1496 const char *prev_path1,
1497 const char *prev_path2,
1498 const char *branch1, const char *branch2,
8daec1df
EN
1499 struct diff_filespec *a,
1500 struct diff_filespec *b)
3672c971 1501{
37b65ce3 1502 struct merge_file_info mfi;
8daec1df 1503 struct diff_filespec null;
37b65ce3
EN
1504 char *alt_path = NULL;
1505 const char *update_path = collide_path;
3672c971 1506
7f867165
EN
1507 /*
1508 * It's easiest to get the correct things into stage 2 and 3, and
1509 * to make sure that the content merge puts HEAD before the other
259ccb6c 1510 * branch if we just ensure that branch1 == opt->branch1. So, simply
7f867165
EN
1511 * flip arguments around if we don't have that.
1512 */
259ccb6c
EN
1513 if (branch1 != opt->branch1) {
1514 return handle_file_collision(opt, collide_path,
7f867165
EN
1515 prev_path2, prev_path1,
1516 branch2, branch1,
8daec1df 1517 b, a);
9047ebbc 1518 }
3672c971 1519
37b65ce3
EN
1520 /*
1521 * In the recursive case, we just opt to undo renames
1522 */
259ccb6c 1523 if (opt->call_depth && (prev_path1 || prev_path2)) {
8daec1df 1524 /* Put first file (a->oid, a->mode) in its original spot */
37b65ce3 1525 if (prev_path1) {
8daec1df 1526 if (update_file(opt, 1, a, prev_path1))
37b65ce3
EN
1527 return -1;
1528 } else {
8daec1df 1529 if (update_file(opt, 1, a, collide_path))
37b65ce3
EN
1530 return -1;
1531 }
3672c971 1532
8daec1df 1533 /* Put second file (b->oid, b->mode) in its original spot */
37b65ce3 1534 if (prev_path2) {
8daec1df 1535 if (update_file(opt, 1, b, prev_path2))
37b65ce3
EN
1536 return -1;
1537 } else {
8daec1df 1538 if (update_file(opt, 1, b, collide_path))
37b65ce3 1539 return -1;
18797a3b 1540 }
37b65ce3
EN
1541
1542 /* Don't leave something at collision path if unrenaming both */
1543 if (prev_path1 && prev_path2)
259ccb6c 1544 remove_file(opt, 1, collide_path, 0);
37b65ce3
EN
1545
1546 return 0;
1547 }
1548
1549 /* Remove rename sources if rename/add or rename/rename(2to1) */
1550 if (prev_path1)
259ccb6c
EN
1551 remove_file(opt, 1, prev_path1,
1552 opt->call_depth || would_lose_untracked(opt, prev_path1));
37b65ce3 1553 if (prev_path2)
259ccb6c
EN
1554 remove_file(opt, 1, prev_path2,
1555 opt->call_depth || would_lose_untracked(opt, prev_path2));
37b65ce3
EN
1556
1557 /*
1558 * Remove the collision path, if it wouldn't cause dirty contents
1559 * or an untracked file to get lost. We'll either overwrite with
1560 * merged contents, or just write out to differently named files.
1561 */
259ccb6c
EN
1562 if (was_dirty(opt, collide_path)) {
1563 output(opt, 1, _("Refusing to lose dirty file at %s"),
37b65ce3 1564 collide_path);
259ccb6c
EN
1565 update_path = alt_path = unique_path(opt, collide_path, "merged");
1566 } else if (would_lose_untracked(opt, collide_path)) {
18797a3b 1567 /*
37b65ce3
EN
1568 * Only way we get here is if both renames were from
1569 * a directory rename AND user had an untracked file
1570 * at the location where both files end up after the
1571 * two directory renames. See testcase 10d of t6043.
18797a3b 1572 */
259ccb6c 1573 output(opt, 1, _("Refusing to lose untracked file at "
37b65ce3
EN
1574 "%s, even though it's in the way."),
1575 collide_path);
259ccb6c 1576 update_path = alt_path = unique_path(opt, collide_path, "merged");
3672c971 1577 } else {
37b65ce3
EN
1578 /*
1579 * FIXME: It's possible that the two files are identical
1580 * and that the current working copy happens to match, in
1581 * which case we are unnecessarily touching the working
1582 * tree file. It's not a likely enough scenario that I
1583 * want to code up the checks for it and a better fix is
1584 * available if we restructure how unpack_trees() and
1585 * merge-recursive interoperate anyway, so punting for
1586 * now...
1587 */
259ccb6c 1588 remove_file(opt, 0, collide_path, 0);
9047ebbc 1589 }
3672c971 1590
37b65ce3 1591 /* Store things in diff_filespecs for functions that need it */
8daec1df 1592 null.path = (char *)collide_path;
37b65ce3
EN
1593 oidcpy(&null.oid, &null_oid);
1594 null.mode = 0;
8daec1df
EN
1595
1596 if (merge_mode_and_contents(opt, &null, a, b, collide_path,
259ccb6c 1597 branch1, branch2, opt->call_depth * 2, &mfi))
37b65ce3
EN
1598 return -1;
1599 mfi.clean &= !alt_path;
8daec1df 1600 if (update_file(opt, mfi.clean, &mfi.blob, update_path))
37b65ce3 1601 return -1;
259ccb6c 1602 if (!mfi.clean && !opt->call_depth &&
8daec1df 1603 update_stages(opt, collide_path, NULL, a, b))
37b65ce3
EN
1604 return -1;
1605 free(alt_path);
1606 /*
1607 * FIXME: If both a & b both started with conflicts (only possible
1608 * if they came from a rename/rename(2to1)), but had IDENTICAL
1609 * contents including those conflicts, then in the next line we claim
1610 * it was clean. If someone cares about this case, we should have the
1611 * caller notify us if we started with conflicts.
1612 */
1613 return mfi.clean;
1614}
7f867165 1615
259ccb6c 1616static int handle_rename_add(struct merge_options *opt,
7f867165
EN
1617 struct rename_conflict_info *ci)
1618{
1619 /* a was renamed to c, and a separate c was added. */
e9cd1b5c
EN
1620 struct diff_filespec *a = ci->ren1->pair->one;
1621 struct diff_filespec *c = ci->ren1->pair->two;
7f867165
EN
1622 char *path = c->path;
1623 char *prev_path_desc;
1624 struct merge_file_info mfi;
1625
c336ab85
EN
1626 const char *rename_branch = ci->ren1->branch;
1627 const char *add_branch = (opt->branch1 == rename_branch ?
1628 opt->branch2 : opt->branch1);
1629 int other_stage = (ci->ren1->branch == opt->branch1 ? 3 : 2);
7f867165 1630
259ccb6c 1631 output(opt, 1, _("CONFLICT (rename/add): "
7f867165 1632 "Rename %s->%s in %s. Added %s in %s"),
c336ab85
EN
1633 a->path, c->path, rename_branch,
1634 c->path, add_branch);
7f867165
EN
1635
1636 prev_path_desc = xstrfmt("version of %s from %s", path, a->path);
481de8a2 1637 ci->ren1->src_entry->stages[other_stage].path = a->path;
8daec1df
EN
1638 if (merge_mode_and_contents(opt, a, c,
1639 &ci->ren1->src_entry->stages[other_stage],
3f9c92ec 1640 prev_path_desc,
259ccb6c
EN
1641 opt->branch1, opt->branch2,
1642 1 + opt->call_depth * 2, &mfi))
7f867165
EN
1643 return -1;
1644 free(prev_path_desc);
1645
8daec1df 1646 ci->ren1->dst_entry->stages[other_stage].path = mfi.blob.path = c->path;
259ccb6c 1647 return handle_file_collision(opt,
7f867165 1648 c->path, a->path, NULL,
c336ab85 1649 rename_branch, add_branch,
8daec1df
EN
1650 &mfi.blob,
1651 &ci->ren1->dst_entry->stages[other_stage]);
7f867165 1652}
37b65ce3 1653
259ccb6c 1654static char *find_path_for_conflict(struct merge_options *opt,
80cee6e3
DS
1655 const char *path,
1656 const char *branch1,
1657 const char *branch2)
1658{
1659 char *new_path = NULL;
259ccb6c
EN
1660 if (dir_in_way(opt->repo->index, path, !opt->call_depth, 0)) {
1661 new_path = unique_path(opt, path, branch1);
1662 output(opt, 1, _("%s is a directory in %s adding "
80cee6e3
DS
1663 "as %s instead"),
1664 path, branch2, new_path);
259ccb6c
EN
1665 } else if (would_lose_untracked(opt, path)) {
1666 new_path = unique_path(opt, path, branch1);
1667 output(opt, 1, _("Refusing to lose untracked file"
80cee6e3
DS
1668 " at %s; adding as %s instead"),
1669 path, new_path);
1670 }
1671
1672 return new_path;
3672c971
EN
1673}
1674
259ccb6c 1675static int handle_rename_rename_1to2(struct merge_options *opt,
8ebe7b05 1676 struct rename_conflict_info *ci)
9047ebbc 1677{
09c01f85 1678 /* One file was renamed in both branches, but to different names. */
48c9cb9d 1679 struct merge_file_info mfi;
48c9cb9d 1680 struct diff_filespec *add;
e9cd1b5c
EN
1681 struct diff_filespec *o = ci->ren1->pair->one;
1682 struct diff_filespec *a = ci->ren1->pair->two;
1683 struct diff_filespec *b = ci->ren2->pair->two;
48c9cb9d 1684 char *path_desc;
4f66dade 1685
259ccb6c 1686 output(opt, 1, _("CONFLICT (rename/rename): "
4f66dade 1687 "Rename \"%s\"->\"%s\" in branch \"%s\" "
55653a68 1688 "rename \"%s\"->\"%s\" in \"%s\"%s"),
c336ab85
EN
1689 o->path, a->path, ci->ren1->branch,
1690 o->path, b->path, ci->ren2->branch,
259ccb6c 1691 opt->call_depth ? _(" (left unresolved)") : "");
75456f96 1692
48c9cb9d 1693 path_desc = xstrfmt("%s and %s, both renamed from %s",
e3de888c
EN
1694 a->path, b->path, o->path);
1695 if (merge_mode_and_contents(opt, o, a, b, path_desc,
c336ab85 1696 ci->ren1->branch, ci->ren2->branch,
259ccb6c 1697 opt->call_depth * 2, &mfi))
48c9cb9d
EN
1698 return -1;
1699 free(path_desc);
1700
259ccb6c 1701 if (opt->call_depth) {
9047ebbc 1702 /*
c52ff85d
EN
1703 * FIXME: For rename/add-source conflicts (if we could detect
1704 * such), this is wrong. We should instead find a unique
1705 * pathname and then either rename the add-source file to that
1706 * unique path, or use that unique path instead of src here.
9047ebbc 1707 */
8daec1df 1708 if (update_file(opt, 0, &mfi.blob, o->path))
75456f96 1709 return -1;
07413c5a 1710
6d63070c
EN
1711 /*
1712 * Above, we put the merged content at the merge-base's
1713 * path. Now we usually need to delete both a->path and
1714 * b->path. However, the rename on each side of the merge
1715 * could also be involved in a rename/add conflict. In
1716 * such cases, we should keep the added file around,
1717 * resolving the conflict at that path in its favor.
1718 */
8daec1df
EN
1719 add = &ci->ren1->dst_entry->stages[2 ^ 1];
1720 if (is_valid(add)) {
1721 if (update_file(opt, 0, add, a->path))
75456f96
JS
1722 return -1;
1723 }
6d63070c 1724 else
259ccb6c 1725 remove_file_from_index(opt->repo->index, a->path);
8daec1df
EN
1726 add = &ci->ren2->dst_entry->stages[3 ^ 1];
1727 if (is_valid(add)) {
1728 if (update_file(opt, 0, add, b->path))
75456f96
JS
1729 return -1;
1730 }
6d63070c 1731 else
259ccb6c 1732 remove_file_from_index(opt->repo->index, b->path);
48c9cb9d
EN
1733 } else {
1734 /*
1735 * For each destination path, we need to see if there is a
1736 * rename/add collision. If not, we can write the file out
1737 * to the specified location.
1738 */
8daec1df
EN
1739 add = &ci->ren1->dst_entry->stages[2 ^ 1];
1740 if (is_valid(add)) {
1741 add->path = mfi.blob.path = a->path;
259ccb6c 1742 if (handle_file_collision(opt, a->path,
48c9cb9d 1743 NULL, NULL,
c336ab85
EN
1744 ci->ren1->branch,
1745 ci->ren2->branch,
8daec1df 1746 &mfi.blob, add) < 0)
48c9cb9d
EN
1747 return -1;
1748 } else {
259ccb6c 1749 char *new_path = find_path_for_conflict(opt, a->path,
c336ab85
EN
1750 ci->ren1->branch,
1751 ci->ren2->branch);
8daec1df
EN
1752 if (update_file(opt, 0, &mfi.blob,
1753 new_path ? new_path : a->path))
48c9cb9d
EN
1754 return -1;
1755 free(new_path);
259ccb6c 1756 if (update_stages(opt, a->path, NULL, a, NULL))
48c9cb9d
EN
1757 return -1;
1758 }
1759
8daec1df
EN
1760 add = &ci->ren2->dst_entry->stages[3 ^ 1];
1761 if (is_valid(add)) {
1762 add->path = mfi.blob.path = b->path;
259ccb6c 1763 if (handle_file_collision(opt, b->path,
48c9cb9d 1764 NULL, NULL,
c336ab85
EN
1765 ci->ren1->branch,
1766 ci->ren2->branch,
8daec1df 1767 add, &mfi.blob) < 0)
48c9cb9d
EN
1768 return -1;
1769 } else {
259ccb6c 1770 char *new_path = find_path_for_conflict(opt, b->path,
c336ab85
EN
1771 ci->ren2->branch,
1772 ci->ren1->branch);
8daec1df
EN
1773 if (update_file(opt, 0, &mfi.blob,
1774 new_path ? new_path : b->path))
48c9cb9d
EN
1775 return -1;
1776 free(new_path);
259ccb6c 1777 if (update_stages(opt, b->path, NULL, NULL, b))
48c9cb9d
EN
1778 return -1;
1779 }
1780 }
75456f96
JS
1781
1782 return 0;
9047ebbc
MV
1783}
1784
259ccb6c 1785static int handle_rename_rename_2to1(struct merge_options *opt,
8ebe7b05 1786 struct rename_conflict_info *ci)
9047ebbc 1787{
461f5041 1788 /* Two files, a & b, were renamed to the same thing, c. */
e9cd1b5c
EN
1789 struct diff_filespec *a = ci->ren1->pair->one;
1790 struct diff_filespec *b = ci->ren2->pair->one;
1791 struct diff_filespec *c1 = ci->ren1->pair->two;
1792 struct diff_filespec *c2 = ci->ren2->pair->two;
461f5041 1793 char *path = c1->path; /* == c2->path */
05cf21eb
EN
1794 char *path_side_1_desc;
1795 char *path_side_2_desc;
434b8525
EN
1796 struct merge_file_info mfi_c1;
1797 struct merge_file_info mfi_c2;
8daec1df 1798 int ostage1, ostage2;
461f5041 1799
259ccb6c 1800 output(opt, 1, _("CONFLICT (rename/rename): "
461f5041 1801 "Rename %s->%s in %s. "
55653a68 1802 "Rename %s->%s in %s"),
c336ab85
EN
1803 a->path, c1->path, ci->ren1->branch,
1804 b->path, c2->path, ci->ren2->branch);
461f5041 1805
2b168ef3
EN
1806 path_side_1_desc = xstrfmt("version of %s from %s", path, a->path);
1807 path_side_2_desc = xstrfmt("version of %s from %s", path, b->path);
8daec1df
EN
1808 ostage1 = ci->ren1->branch == opt->branch1 ? 3 : 2;
1809 ostage2 = ostage1 ^ 1;
1810 ci->ren1->src_entry->stages[ostage1].path = a->path;
1811 ci->ren2->src_entry->stages[ostage2].path = b->path;
1812 if (merge_mode_and_contents(opt, a, c1,
1813 &ci->ren1->src_entry->stages[ostage1],
1814 path_side_1_desc,
259ccb6c
EN
1815 opt->branch1, opt->branch2,
1816 1 + opt->call_depth * 2, &mfi_c1) ||
8daec1df
EN
1817 merge_mode_and_contents(opt, b,
1818 &ci->ren2->src_entry->stages[ostage2],
1819 c2, path_side_2_desc,
259ccb6c
EN
1820 opt->branch1, opt->branch2,
1821 1 + opt->call_depth * 2, &mfi_c2))
75456f96 1822 return -1;
05cf21eb
EN
1823 free(path_side_1_desc);
1824 free(path_side_2_desc);
8daec1df
EN
1825 mfi_c1.blob.path = path;
1826 mfi_c2.blob.path = path;
434b8525 1827
259ccb6c 1828 return handle_file_collision(opt, path, a->path, b->path,
c336ab85 1829 ci->ren1->branch, ci->ren2->branch,
8daec1df 1830 &mfi_c1.blob, &mfi_c2.blob);
9047ebbc
MV
1831}
1832
9ba91557 1833/*
e5257b2a 1834 * Get the diff_filepairs changed between o_tree and tree.
9ba91557 1835 */
259ccb6c 1836static struct diff_queue_struct *get_diffpairs(struct merge_options *opt,
e5257b2a
EN
1837 struct tree *o_tree,
1838 struct tree *tree)
9ba91557 1839{
e5257b2a 1840 struct diff_queue_struct *ret;
9ba91557
EN
1841 struct diff_options opts;
1842
259ccb6c 1843 repo_diff_setup(opt->repo, &opts);
9ba91557
EN
1844 opts.flags.recursive = 1;
1845 opts.flags.rename_empty = 0;
259ccb6c 1846 opts.detect_rename = merge_detect_rename(opt);
85b46030
BP
1847 /*
1848 * We do not have logic to handle the detection of copies. In
1849 * fact, it may not even make sense to add such logic: would we
1850 * really want a change to a base file to be propagated through
1851 * multiple other files by a merge?
1852 */
1853 if (opts.detect_rename > DIFF_DETECT_RENAME)
1854 opts.detect_rename = DIFF_DETECT_RENAME;
259ccb6c
EN
1855 opts.rename_limit = opt->merge_rename_limit >= 0 ? opt->merge_rename_limit :
1856 opt->diff_rename_limit >= 0 ? opt->diff_rename_limit :
9ba91557 1857 1000;
259ccb6c
EN
1858 opts.rename_score = opt->rename_score;
1859 opts.show_rename_progress = opt->show_rename_progress;
9ba91557
EN
1860 opts.output_format = DIFF_FORMAT_NO_OUTPUT;
1861 diff_setup_done(&opts);
1862 diff_tree_oid(&o_tree->object.oid, &tree->object.oid, "", &opts);
1863 diffcore_std(&opts);
259ccb6c
EN
1864 if (opts.needed_rename_limit > opt->needed_rename_limit)
1865 opt->needed_rename_limit = opts.needed_rename_limit;
e5257b2a
EN
1866
1867 ret = xmalloc(sizeof(*ret));
1868 *ret = diff_queued_diff;
1869
1870 opts.output_format = DIFF_FORMAT_NO_OUTPUT;
1871 diff_queued_diff.nr = 0;
1872 diff_queued_diff.queue = NULL;
1873 diff_flush(&opts);
1874 return ret;
1875}
1876
34e7771b
NTND
1877static int tree_has_path(struct repository *r, struct tree *tree,
1878 const char *path)
96e7ffbd
EN
1879{
1880 struct object_id hashy;
5ec1e728 1881 unsigned short mode_o;
96e7ffbd 1882
34e7771b 1883 return !get_tree_entry(r,
50ddb089 1884 &tree->object.oid, path,
96e7ffbd
EN
1885 &hashy, &mode_o);
1886}
1887
e95ab70a
EN
1888/*
1889 * Return a new string that replaces the beginning portion (which matches
1890 * entry->dir), with entry->new_dir. In perl-speak:
1891 * new_path_name = (old_path =~ s/entry->dir/entry->new_dir/);
1892 * NOTE:
1893 * Caller must ensure that old_path starts with entry->dir + '/'.
1894 */
1895static char *apply_dir_rename(struct dir_rename_entry *entry,
1896 const char *old_path)
1897{
1898 struct strbuf new_path = STRBUF_INIT;
1899 int oldlen, newlen;
1900
1901 if (entry->non_unique_new_dir)
1902 return NULL;
1903
1904 oldlen = strlen(entry->dir);
1905 newlen = entry->new_dir.len + (strlen(old_path) - oldlen) + 1;
1906 strbuf_grow(&new_path, newlen);
1907 strbuf_addbuf(&new_path, &entry->new_dir);
1908 strbuf_addstr(&new_path, &old_path[oldlen]);
1909
1910 return strbuf_detach(&new_path, NULL);
1911}
1912
7fe40b88
EN
1913static void get_renamed_dir_portion(const char *old_path, const char *new_path,
1914 char **old_dir, char **new_dir)
1915{
1916 char *end_of_old, *end_of_new;
1917 int old_len, new_len;
1918
1919 *old_dir = NULL;
1920 *new_dir = NULL;
1921
1922 /*
1923 * For
1924 * "a/b/c/d/e/foo.c" -> "a/b/some/thing/else/e/foo.c"
1925 * the "e/foo.c" part is the same, we just want to know that
1926 * "a/b/c/d" was renamed to "a/b/some/thing/else"
1927 * so, for this example, this function returns "a/b/c/d" in
1928 * *old_dir and "a/b/some/thing/else" in *new_dir.
1929 *
1930 * Also, if the basename of the file changed, we don't care. We
1931 * want to know which portion of the directory, if any, changed.
1932 */
1933 end_of_old = strrchr(old_path, '/');
1934 end_of_new = strrchr(new_path, '/');
1935
1936 if (end_of_old == NULL || end_of_new == NULL)
1937 return;
1938 while (*--end_of_new == *--end_of_old &&
1939 end_of_old != old_path &&
1940 end_of_new != new_path)
1941 ; /* Do nothing; all in the while loop */
1942 /*
1943 * We've found the first non-matching character in the directory
1944 * paths. That means the current directory we were comparing
1945 * represents the rename. Move end_of_old and end_of_new back
1946 * to the full directory name.
1947 */
1948 if (*end_of_old == '/')
1949 end_of_old++;
1950 if (*end_of_old != '/')
1951 end_of_new++;
1952 end_of_old = strchr(end_of_old, '/');
1953 end_of_new = strchr(end_of_new, '/');
1954
1955 /*
1956 * It may have been the case that old_path and new_path were the same
1957 * directory all along. Don't claim a rename if they're the same.
1958 */
1959 old_len = end_of_old - old_path;
1960 new_len = end_of_new - new_path;
1961
1962 if (old_len != new_len || strncmp(old_path, new_path, old_len)) {
1963 *old_dir = xstrndup(old_path, old_len);
1964 *new_dir = xstrndup(new_path, new_len);
1965 }
1966}
1967
96e7ffbd
EN
1968static void remove_hashmap_entries(struct hashmap *dir_renames,
1969 struct string_list *items_to_remove)
1970{
1971 int i;
1972 struct dir_rename_entry *entry;
1973
1974 for (i = 0; i < items_to_remove->nr; i++) {
1975 entry = items_to_remove->items[i].util;
1976 hashmap_remove(dir_renames, entry, NULL);
1977 }
1978 string_list_clear(items_to_remove, 0);
1979}
1980
f6f77559
EN
1981/*
1982 * See if there is a directory rename for path, and if there are any file
1983 * level conflicts for the renamed location. If there is a rename and
1984 * there are no conflicts, return the new name. Otherwise, return NULL.
1985 */
259ccb6c 1986static char *handle_path_level_conflicts(struct merge_options *opt,
f6f77559
EN
1987 const char *path,
1988 struct dir_rename_entry *entry,
1989 struct hashmap *collisions,
1990 struct tree *tree)
1991{
1992 char *new_path = NULL;
1993 struct collision_entry *collision_ent;
1994 int clean = 1;
1995 struct strbuf collision_paths = STRBUF_INIT;
1996
1997 /*
1998 * entry has the mapping of old directory name to new directory name
1999 * that we want to apply to path.
2000 */
2001 new_path = apply_dir_rename(entry, path);
2002
2003 if (!new_path) {
2004 /* This should only happen when entry->non_unique_new_dir set */
2005 if (!entry->non_unique_new_dir)
2006 BUG("entry->non_unqiue_dir not set and !new_path");
259ccb6c 2007 output(opt, 1, _("CONFLICT (directory rename split): "
f6f77559
EN
2008 "Unclear where to place %s because directory "
2009 "%s was renamed to multiple other directories, "
2010 "with no destination getting a majority of the "
2011 "files."),
2012 path, entry->dir);
2013 clean = 0;
2014 return NULL;
2015 }
2016
2017 /*
2018 * The caller needs to have ensured that it has pre-populated
2019 * collisions with all paths that map to new_path. Do a quick check
2020 * to ensure that's the case.
2021 */
2022 collision_ent = collision_find_entry(collisions, new_path);
2023 if (collision_ent == NULL)
2024 BUG("collision_ent is NULL");
2025
2026 /*
2027 * Check for one-sided add/add/.../add conflicts, i.e.
2028 * where implicit renames from the other side doing
2029 * directory rename(s) can affect this side of history
2030 * to put multiple paths into the same location. Warn
2031 * and bail on directory renames for such paths.
2032 */
2033 if (collision_ent->reported_already) {
2034 clean = 0;
34e7771b 2035 } else if (tree_has_path(opt->repo, tree, new_path)) {
f6f77559
EN
2036 collision_ent->reported_already = 1;
2037 strbuf_add_separated_string_list(&collision_paths, ", ",
2038 &collision_ent->source_files);
259ccb6c 2039 output(opt, 1, _("CONFLICT (implicit dir rename): Existing "
f6f77559
EN
2040 "file/dir at %s in the way of implicit "
2041 "directory rename(s) putting the following "
2042 "path(s) there: %s."),
2043 new_path, collision_paths.buf);
2044 clean = 0;
2045 } else if (collision_ent->source_files.nr > 1) {
2046 collision_ent->reported_already = 1;
2047 strbuf_add_separated_string_list(&collision_paths, ", ",
2048 &collision_ent->source_files);
259ccb6c 2049 output(opt, 1, _("CONFLICT (implicit dir rename): Cannot map "
f6f77559
EN
2050 "more than one path to %s; implicit directory "
2051 "renames tried to put these paths there: %s"),
2052 new_path, collision_paths.buf);
2053 clean = 0;
2054 }
2055
2056 /* Free memory we no longer need */
2057 strbuf_release(&collision_paths);
2058 if (!clean && new_path) {
2059 free(new_path);
2060 return NULL;
2061 }
2062
2063 return new_path;
2064}
2065
96e7ffbd
EN
2066/*
2067 * There are a couple things we want to do at the directory level:
2068 * 1. Check for both sides renaming to the same thing, in order to avoid
2069 * implicit renaming of files that should be left in place. (See
2070 * testcase 6b in t6043 for details.)
2071 * 2. Prune directory renames if there are still files left in the
2072 * the original directory. These represent a partial directory rename,
2073 * i.e. a rename where only some of the files within the directory
2074 * were renamed elsewhere. (Technically, this could be done earlier
2075 * in get_directory_renames(), except that would prevent us from
2076 * doing the previous check and thus failing testcase 6b.)
2077 * 3. Check for rename/rename(1to2) conflicts (at the directory level).
2078 * In the future, we could potentially record this info as well and
2079 * omit reporting rename/rename(1to2) conflicts for each path within
2080 * the affected directories, thus cleaning up the merge output.
2081 * NOTE: We do NOT check for rename/rename(2to1) conflicts at the
2082 * directory level, because merging directories is fine. If it
2083 * causes conflicts for files within those merged directories, then
2084 * that should be detected at the individual path level.
2085 */
259ccb6c 2086static void handle_directory_level_conflicts(struct merge_options *opt,
96e7ffbd
EN
2087 struct hashmap *dir_re_head,
2088 struct tree *head,
2089 struct hashmap *dir_re_merge,
2090 struct tree *merge)
2091{
2092 struct hashmap_iter iter;
2093 struct dir_rename_entry *head_ent;
2094 struct dir_rename_entry *merge_ent;
2095
2096 struct string_list remove_from_head = STRING_LIST_INIT_NODUP;
2097 struct string_list remove_from_merge = STRING_LIST_INIT_NODUP;
2098
2099 hashmap_iter_init(dir_re_head, &iter);
2100 while ((head_ent = hashmap_iter_next(&iter))) {
2101 merge_ent = dir_rename_find_entry(dir_re_merge, head_ent->dir);
2102 if (merge_ent &&
2103 !head_ent->non_unique_new_dir &&
2104 !merge_ent->non_unique_new_dir &&
2105 !strbuf_cmp(&head_ent->new_dir, &merge_ent->new_dir)) {
2106 /* 1. Renamed identically; remove it from both sides */
2107 string_list_append(&remove_from_head,
2108 head_ent->dir)->util = head_ent;
2109 strbuf_release(&head_ent->new_dir);
2110 string_list_append(&remove_from_merge,
2111 merge_ent->dir)->util = merge_ent;
2112 strbuf_release(&merge_ent->new_dir);
34e7771b 2113 } else if (tree_has_path(opt->repo, head, head_ent->dir)) {
96e7ffbd
EN
2114 /* 2. This wasn't a directory rename after all */
2115 string_list_append(&remove_from_head,
2116 head_ent->dir)->util = head_ent;
2117 strbuf_release(&head_ent->new_dir);
2118 }
2119 }
2120
2121 remove_hashmap_entries(dir_re_head, &remove_from_head);
2122 remove_hashmap_entries(dir_re_merge, &remove_from_merge);
2123
2124 hashmap_iter_init(dir_re_merge, &iter);
2125 while ((merge_ent = hashmap_iter_next(&iter))) {
2126 head_ent = dir_rename_find_entry(dir_re_head, merge_ent->dir);
34e7771b 2127 if (tree_has_path(opt->repo, merge, merge_ent->dir)) {
96e7ffbd
EN
2128 /* 2. This wasn't a directory rename after all */
2129 string_list_append(&remove_from_merge,
2130 merge_ent->dir)->util = merge_ent;
2131 } else if (head_ent &&
2132 !head_ent->non_unique_new_dir &&
2133 !merge_ent->non_unique_new_dir) {
2134 /* 3. rename/rename(1to2) */
2135 /*
2136 * We can assume it's not rename/rename(1to1) because
2137 * that was case (1), already checked above. So we
2138 * know that head_ent->new_dir and merge_ent->new_dir
2139 * are different strings.
2140 */
259ccb6c 2141 output(opt, 1, _("CONFLICT (rename/rename): "
96e7ffbd
EN
2142 "Rename directory %s->%s in %s. "
2143 "Rename directory %s->%s in %s"),
259ccb6c
EN
2144 head_ent->dir, head_ent->new_dir.buf, opt->branch1,
2145 head_ent->dir, merge_ent->new_dir.buf, opt->branch2);
96e7ffbd
EN
2146 string_list_append(&remove_from_head,
2147 head_ent->dir)->util = head_ent;
2148 strbuf_release(&head_ent->new_dir);
2149 string_list_append(&remove_from_merge,
2150 merge_ent->dir)->util = merge_ent;
2151 strbuf_release(&merge_ent->new_dir);
2152 }
2153 }
2154
2155 remove_hashmap_entries(dir_re_head, &remove_from_head);
2156 remove_hashmap_entries(dir_re_merge, &remove_from_merge);
2157}
2158
b53c5028 2159static struct hashmap *get_directory_renames(struct diff_queue_struct *pairs)
7fe40b88
EN
2160{
2161 struct hashmap *dir_renames;
2162 struct hashmap_iter iter;
2163 struct dir_rename_entry *entry;
2164 int i;
2165
2166 /*
2167 * Typically, we think of a directory rename as all files from a
2168 * certain directory being moved to a target directory. However,
2169 * what if someone first moved two files from the original
2170 * directory in one commit, and then renamed the directory
2171 * somewhere else in a later commit? At merge time, we just know
2172 * that files from the original directory went to two different
2173 * places, and that the bulk of them ended up in the same place.
2174 * We want each directory rename to represent where the bulk of the
2175 * files from that directory end up; this function exists to find
2176 * where the bulk of the files went.
2177 *
2178 * The first loop below simply iterates through the list of file
2179 * renames, finding out how often each directory rename pair
2180 * possibility occurs.
2181 */
2182 dir_renames = xmalloc(sizeof(*dir_renames));
2183 dir_rename_init(dir_renames);
2184 for (i = 0; i < pairs->nr; ++i) {
2185 struct string_list_item *item;
2186 int *count;
2187 struct diff_filepair *pair = pairs->queue[i];
2188 char *old_dir, *new_dir;
2189
2190 /* File not part of directory rename if it wasn't renamed */
2191 if (pair->status != 'R')
2192 continue;
2193
2194 get_renamed_dir_portion(pair->one->path, pair->two->path,
2195 &old_dir, &new_dir);
2196 if (!old_dir)
2197 /* Directory didn't change at all; ignore this one. */
2198 continue;
2199
2200 entry = dir_rename_find_entry(dir_renames, old_dir);
2201 if (!entry) {
2202 entry = xmalloc(sizeof(*entry));
2203 dir_rename_entry_init(entry, old_dir);
2204 hashmap_put(dir_renames, entry);
2205 } else {
2206 free(old_dir);
2207 }
2208 item = string_list_lookup(&entry->possible_new_dirs, new_dir);
2209 if (!item) {
2210 item = string_list_insert(&entry->possible_new_dirs,
2211 new_dir);
2212 item->util = xcalloc(1, sizeof(int));
2213 } else {
2214 free(new_dir);
2215 }
2216 count = item->util;
2217 *count += 1;
2218 }
2219
2220 /*
2221 * For each directory with files moved out of it, we find out which
2222 * target directory received the most files so we can declare it to
2223 * be the "winning" target location for the directory rename. This
2224 * winner gets recorded in new_dir. If there is no winner
2225 * (multiple target directories received the same number of files),
2226 * we set non_unique_new_dir. Once we've determined the winner (or
2227 * that there is no winner), we no longer need possible_new_dirs.
2228 */
2229 hashmap_iter_init(dir_renames, &iter);
2230 while ((entry = hashmap_iter_next(&iter))) {
2231 int max = 0;
2232 int bad_max = 0;
2233 char *best = NULL;
2234
2235 for (i = 0; i < entry->possible_new_dirs.nr; i++) {
2236 int *count = entry->possible_new_dirs.items[i].util;
2237
2238 if (*count == max)
2239 bad_max = max;
2240 else if (*count > max) {
2241 max = *count;
2242 best = entry->possible_new_dirs.items[i].string;
2243 }
2244 }
2245 if (bad_max == max)
2246 entry->non_unique_new_dir = 1;
2247 else {
2248 assert(entry->new_dir.len == 0);
2249 strbuf_addstr(&entry->new_dir, best);
2250 }
2251 /*
2252 * The relevant directory sub-portion of the original full
2253 * filepaths were xstrndup'ed before inserting into
2254 * possible_new_dirs, and instead of manually iterating the
2255 * list and free'ing each, just lie and tell
2256 * possible_new_dirs that it did the strdup'ing so that it
2257 * will free them for us.
2258 */
2259 entry->possible_new_dirs.strdup_strings = 1;
2260 string_list_clear(&entry->possible_new_dirs, 1);
2261 }
2262
2263 return dir_renames;
2264}
2265
e95ab70a
EN
2266static struct dir_rename_entry *check_dir_renamed(const char *path,
2267 struct hashmap *dir_renames)
2268{
9da2d037 2269 char *temp = xstrdup(path);
e95ab70a 2270 char *end;
c3b9bc94 2271 struct dir_rename_entry *entry = NULL;
e95ab70a 2272
e95ab70a
EN
2273 while ((end = strrchr(temp, '/'))) {
2274 *end = '\0';
2275 entry = dir_rename_find_entry(dir_renames, temp);
2276 if (entry)
9da2d037 2277 break;
e95ab70a 2278 }
9da2d037
RS
2279 free(temp);
2280 return entry;
e95ab70a
EN
2281}
2282
2283static void compute_collisions(struct hashmap *collisions,
2284 struct hashmap *dir_renames,
2285 struct diff_queue_struct *pairs)
2286{
2287 int i;
2288
2289 /*
2290 * Multiple files can be mapped to the same path due to directory
2291 * renames done by the other side of history. Since that other
2292 * side of history could have merged multiple directories into one,
2293 * if our side of history added the same file basename to each of
2294 * those directories, then all N of them would get implicitly
2295 * renamed by the directory rename detection into the same path,
2296 * and we'd get an add/add/.../add conflict, and all those adds
2297 * from *this* side of history. This is not representable in the
2298 * index, and users aren't going to easily be able to make sense of
2299 * it. So we need to provide a good warning about what's
2300 * happening, and fall back to no-directory-rename detection
2301 * behavior for those paths.
2302 *
2303 * See testcases 9e and all of section 5 from t6043 for examples.
2304 */
2305 collision_init(collisions);
2306
2307 for (i = 0; i < pairs->nr; ++i) {
2308 struct dir_rename_entry *dir_rename_ent;
2309 struct collision_entry *collision_ent;
2310 char *new_path;
2311 struct diff_filepair *pair = pairs->queue[i];
2312
6e7e027f 2313 if (pair->status != 'A' && pair->status != 'R')
e95ab70a
EN
2314 continue;
2315 dir_rename_ent = check_dir_renamed(pair->two->path,
2316 dir_renames);
2317 if (!dir_rename_ent)
2318 continue;
2319
2320 new_path = apply_dir_rename(dir_rename_ent, pair->two->path);
2321 if (!new_path)
2322 /*
2323 * dir_rename_ent->non_unique_new_path is true, which
2324 * means there is no directory rename for us to use,
2325 * which means it won't cause us any additional
2326 * collisions.
2327 */
2328 continue;
2329 collision_ent = collision_find_entry(collisions, new_path);
2330 if (!collision_ent) {
2331 collision_ent = xcalloc(1,
2332 sizeof(struct collision_entry));
2333 hashmap_entry_init(collision_ent, strhash(new_path));
2334 hashmap_put(collisions, collision_ent);
2335 collision_ent->target_file = new_path;
2336 } else {
2337 free(new_path);
2338 }
2339 string_list_insert(&collision_ent->source_files,
2340 pair->two->path);
2341 }
2342}
2343
259ccb6c 2344static char *check_for_directory_rename(struct merge_options *opt,
f6f77559
EN
2345 const char *path,
2346 struct tree *tree,
2347 struct hashmap *dir_renames,
2348 struct hashmap *dir_rename_exclusions,
2349 struct hashmap *collisions,
2350 int *clean_merge)
2351{
2352 char *new_path = NULL;
2353 struct dir_rename_entry *entry = check_dir_renamed(path, dir_renames);
2354 struct dir_rename_entry *oentry = NULL;
2355
2356 if (!entry)
2357 return new_path;
2358
2359 /*
2360 * This next part is a little weird. We do not want to do an
2361 * implicit rename into a directory we renamed on our side, because
2362 * that will result in a spurious rename/rename(1to2) conflict. An
2363 * example:
2364 * Base commit: dumbdir/afile, otherdir/bfile
2365 * Side 1: smrtdir/afile, otherdir/bfile
2366 * Side 2: dumbdir/afile, dumbdir/bfile
2367 * Here, while working on Side 1, we could notice that otherdir was
2368 * renamed/merged to dumbdir, and change the diff_filepair for
2369 * otherdir/bfile into a rename into dumbdir/bfile. However, Side
2370 * 2 will notice the rename from dumbdir to smrtdir, and do the
2371 * transitive rename to move it from dumbdir/bfile to
2372 * smrtdir/bfile. That gives us bfile in dumbdir vs being in
2373 * smrtdir, a rename/rename(1to2) conflict. We really just want
2374 * the file to end up in smrtdir. And the way to achieve that is
2375 * to not let Side1 do the rename to dumbdir, since we know that is
2376 * the source of one of our directory renames.
2377 *
2378 * That's why oentry and dir_rename_exclusions is here.
2379 *
2380 * As it turns out, this also prevents N-way transient rename
2381 * confusion; See testcases 9c and 9d of t6043.
2382 */
2383 oentry = dir_rename_find_entry(dir_rename_exclusions, entry->new_dir.buf);
2384 if (oentry) {
259ccb6c 2385 output(opt, 1, _("WARNING: Avoiding applying %s -> %s rename "
f6f77559
EN
2386 "to %s, because %s itself was renamed."),
2387 entry->dir, entry->new_dir.buf, path, entry->new_dir.buf);
2388 } else {
259ccb6c 2389 new_path = handle_path_level_conflicts(opt, path, entry,
f6f77559
EN
2390 collisions, tree);
2391 *clean_merge &= (new_path != NULL);
2392 }
2393
2394 return new_path;
2395}
2396
259ccb6c 2397static void apply_directory_rename_modifications(struct merge_options *opt,
9c0743fe
EN
2398 struct diff_filepair *pair,
2399 char *new_path,
2400 struct rename *re,
2401 struct tree *tree,
2402 struct tree *o_tree,
2403 struct tree *a_tree,
2404 struct tree *b_tree,
b53c5028 2405 struct string_list *entries)
9c0743fe
EN
2406{
2407 struct string_list_item *item;
2408 int stage = (tree == a_tree ? 2 : 3);
18797a3b 2409 int update_wd;
9c0743fe
EN
2410
2411 /*
2412 * In all cases where we can do directory rename detection,
2413 * unpack_trees() will have read pair->two->path into the
2414 * index and the working copy. We need to remove it so that
2415 * we can instead place it at new_path. It is guaranteed to
2416 * not be untracked (unpack_trees() would have errored out
2417 * saying the file would have been overwritten), but it might
2418 * be dirty, though.
2419 */
259ccb6c 2420 update_wd = !was_dirty(opt, pair->two->path);
18797a3b 2421 if (!update_wd)
259ccb6c 2422 output(opt, 1, _("Refusing to lose dirty file at %s"),
18797a3b 2423 pair->two->path);
259ccb6c 2424 remove_file(opt, 1, pair->two->path, !update_wd);
9c0743fe
EN
2425
2426 /* Find or create a new re->dst_entry */
2427 item = string_list_lookup(entries, new_path);
2428 if (item) {
2429 /*
2430 * Since we're renaming on this side of history, and it's
2431 * due to a directory rename on the other side of history
2432 * (which we only allow when the directory in question no
2433 * longer exists on the other side of history), the
2434 * original entry for re->dst_entry is no longer
2435 * necessary...
2436 */
2437 re->dst_entry->processed = 1;
2438
2439 /*
2440 * ...because we'll be using this new one.
2441 */
2442 re->dst_entry = item->util;
2443 } else {
2444 /*
2445 * re->dst_entry is for the before-dir-rename path, and we
2446 * need it to hold information for the after-dir-rename
2447 * path. Before creating a new entry, we need to mark the
2448 * old one as unnecessary (...unless it is shared by
2449 * src_entry, i.e. this didn't use to be a rename, in which
2450 * case we can just allow the normal processing to happen
2451 * for it).
2452 */
2453 if (pair->status == 'R')
2454 re->dst_entry->processed = 1;
2455
34e7771b 2456 re->dst_entry = insert_stage_data(opt->repo, new_path,
9c0743fe
EN
2457 o_tree, a_tree, b_tree,
2458 entries);
2459 item = string_list_insert(entries, new_path);
2460 item->util = re->dst_entry;
2461 }
2462
2463 /*
2464 * Update the stage_data with the information about the path we are
2465 * moving into place. That slot will be empty and available for us
2466 * to write to because of the collision checks in
2467 * handle_path_level_conflicts(). In other words,
2468 * re->dst_entry->stages[stage].oid will be the null_oid, so it's
2469 * open for us to write to.
2470 *
2471 * It may be tempting to actually update the index at this point as
2472 * well, using update_stages_for_stage_data(), but as per the big
2473 * "NOTE" in update_stages(), doing so will modify the current
2474 * in-memory index which will break calls to would_lose_untracked()
2475 * that we need to make. Instead, we need to just make sure that
8ebe7b05 2476 * the various handle_rename_*() functions update the index
9c0743fe
EN
2477 * explicitly rather than relying on unpack_trees() to have done it.
2478 */
50ddb089
NTND
2479 get_tree_entry(opt->repo,
2480 &tree->object.oid,
9c0743fe
EN
2481 pair->two->path,
2482 &re->dst_entry->stages[stage].oid,
2483 &re->dst_entry->stages[stage].mode);
2484
6d169fd3
EN
2485 /*
2486 * Record the original change status (or 'type' of change). If it
2487 * was originally an add ('A'), this lets us differentiate later
2488 * between a RENAME_DELETE conflict and RENAME_VIA_DIR (they
2489 * otherwise look the same). If it was originally a rename ('R'),
2490 * this lets us remember and report accurately about the transitive
2491 * renaming that occurred via the directory rename detection. Also,
2492 * record the original destination name.
2493 */
2494 re->dir_rename_original_type = pair->status;
2495 re->dir_rename_original_dest = pair->two->path;
2496
9c0743fe
EN
2497 /*
2498 * We don't actually look at pair->status again, but it seems
2499 * pedagogically correct to adjust it.
2500 */
2501 pair->status = 'R';
2502
2503 /*
2504 * Finally, record the new location.
2505 */
2506 pair->two->path = new_path;
2507}
2508
e5257b2a
EN
2509/*
2510 * Get information of all renames which occurred in 'pairs', making use of
2511 * any implicit directory renames inferred from the other side of history.
2512 * We need the three trees in the merge ('o_tree', 'a_tree' and 'b_tree')
2513 * to be able to associate the correct cache entries with the rename
2514 * information; tree is always equal to either a_tree or b_tree.
2515 */
259ccb6c 2516static struct string_list *get_renames(struct merge_options *opt,
c336ab85 2517 const char *branch,
e5257b2a 2518 struct diff_queue_struct *pairs,
e95ab70a 2519 struct hashmap *dir_renames,
f6f77559 2520 struct hashmap *dir_rename_exclusions,
e5257b2a
EN
2521 struct tree *tree,
2522 struct tree *o_tree,
2523 struct tree *a_tree,
2524 struct tree *b_tree,
f6f77559
EN
2525 struct string_list *entries,
2526 int *clean_merge)
e5257b2a
EN
2527{
2528 int i;
e95ab70a
EN
2529 struct hashmap collisions;
2530 struct hashmap_iter iter;
2531 struct collision_entry *e;
e5257b2a
EN
2532 struct string_list *renames;
2533
e95ab70a 2534 compute_collisions(&collisions, dir_renames, pairs);
e5257b2a
EN
2535 renames = xcalloc(1, sizeof(struct string_list));
2536
2537 for (i = 0; i < pairs->nr; ++i) {
9ba91557
EN
2538 struct string_list_item *item;
2539 struct rename *re;
e5257b2a 2540 struct diff_filepair *pair = pairs->queue[i];
f6f77559 2541 char *new_path; /* non-NULL only with directory renames */
9ba91557 2542
6e7e027f 2543 if (pair->status != 'A' && pair->status != 'R') {
9ba91557
EN
2544 diff_free_filepair(pair);
2545 continue;
2546 }
259ccb6c 2547 new_path = check_for_directory_rename(opt, pair->two->path, tree,
f6f77559
EN
2548 dir_renames,
2549 dir_rename_exclusions,
2550 &collisions,
2551 clean_merge);
2552 if (pair->status != 'R' && !new_path) {
2553 diff_free_filepair(pair);
2554 continue;
2555 }
2556
9ba91557
EN
2557 re = xmalloc(sizeof(*re));
2558 re->processed = 0;
2559 re->pair = pair;
c336ab85 2560 re->branch = branch;
6d169fd3
EN
2561 re->dir_rename_original_type = '\0';
2562 re->dir_rename_original_dest = NULL;
9ba91557
EN
2563 item = string_list_lookup(entries, re->pair->one->path);
2564 if (!item)
34e7771b
NTND
2565 re->src_entry = insert_stage_data(opt->repo,
2566 re->pair->one->path,
9ba91557
EN
2567 o_tree, a_tree, b_tree, entries);
2568 else
2569 re->src_entry = item->util;
2570
2571 item = string_list_lookup(entries, re->pair->two->path);
2572 if (!item)
34e7771b
NTND
2573 re->dst_entry = insert_stage_data(opt->repo,
2574 re->pair->two->path,
9ba91557
EN
2575 o_tree, a_tree, b_tree, entries);
2576 else
2577 re->dst_entry = item->util;
2578 item = string_list_insert(renames, pair->one->path);
2579 item->util = re;
9c0743fe 2580 if (new_path)
259ccb6c 2581 apply_directory_rename_modifications(opt, pair, new_path,
9c0743fe
EN
2582 re, tree, o_tree,
2583 a_tree, b_tree,
b53c5028 2584 entries);
9ba91557 2585 }
e95ab70a
EN
2586
2587 hashmap_iter_init(&collisions, &iter);
2588 while ((e = hashmap_iter_next(&iter))) {
2589 free(e->target_file);
2590 string_list_clear(&e->source_files, 0);
2591 }
2592 hashmap_free(&collisions, 1);
9ba91557
EN
2593 return renames;
2594}
2595
259ccb6c 2596static int process_renames(struct merge_options *opt,
8a2fce18
MV
2597 struct string_list *a_renames,
2598 struct string_list *b_renames)
9047ebbc
MV
2599{
2600 int clean_merge = 1, i, j;
183113a5
TF
2601 struct string_list a_by_dst = STRING_LIST_INIT_NODUP;
2602 struct string_list b_by_dst = STRING_LIST_INIT_NODUP;
9047ebbc
MV
2603 const struct rename *sre;
2604
2605 for (i = 0; i < a_renames->nr; i++) {
2606 sre = a_renames->items[i].util;
78a395d3 2607 string_list_insert(&a_by_dst, sre->pair->two->path)->util
0a6b8712 2608 = (void *)sre;
9047ebbc
MV
2609 }
2610 for (i = 0; i < b_renames->nr; i++) {
2611 sre = b_renames->items[i].util;
78a395d3 2612 string_list_insert(&b_by_dst, sre->pair->two->path)->util
0a6b8712 2613 = (void *)sre;
9047ebbc
MV
2614 }
2615
2616 for (i = 0, j = 0; i < a_renames->nr || j < b_renames->nr;) {
8e24cbae 2617 struct string_list *renames1, *renames2Dst;
9047ebbc 2618 struct rename *ren1 = NULL, *ren2 = NULL;
9047ebbc 2619 const char *ren1_src, *ren1_dst;
461f5041 2620 struct string_list_item *lookup;
9047ebbc
MV
2621
2622 if (i >= a_renames->nr) {
9047ebbc
MV
2623 ren2 = b_renames->items[j++].util;
2624 } else if (j >= b_renames->nr) {
9047ebbc
MV
2625 ren1 = a_renames->items[i++].util;
2626 } else {
8e24cbae
BK
2627 int compare = strcmp(a_renames->items[i].string,
2628 b_renames->items[j].string);
9047ebbc
MV
2629 if (compare <= 0)
2630 ren1 = a_renames->items[i++].util;
2631 if (compare >= 0)
2632 ren2 = b_renames->items[j++].util;
2633 }
2634
2635 /* TODO: refactor, so that 1/2 are not needed */
2636 if (ren1) {
2637 renames1 = a_renames;
9047ebbc 2638 renames2Dst = &b_by_dst;
9047ebbc 2639 } else {
9047ebbc 2640 renames1 = b_renames;
9047ebbc 2641 renames2Dst = &a_by_dst;
35d803bc 2642 SWAP(ren2, ren1);
9047ebbc 2643 }
9047ebbc 2644
9047ebbc
MV
2645 if (ren1->processed)
2646 continue;
2647 ren1->processed = 1;
9047ebbc 2648 ren1->dst_entry->processed = 1;
7769a75e
EN
2649 /* BUG: We should only mark src_entry as processed if we
2650 * are not dealing with a rename + add-source case.
2651 */
9047ebbc 2652 ren1->src_entry->processed = 1;
9047ebbc
MV
2653
2654 ren1_src = ren1->pair->one->path;
2655 ren1_dst = ren1->pair->two->path;
2656
2657 if (ren2) {
461f5041 2658 /* One file renamed on both sides */
9047ebbc
MV
2659 const char *ren2_src = ren2->pair->one->path;
2660 const char *ren2_dst = ren2->pair->two->path;
4f66dade 2661 enum rename_type rename_type;
9047ebbc 2662 if (strcmp(ren1_src, ren2_src) != 0)
033abf97 2663 BUG("ren1_src != ren2_src");
9047ebbc
MV
2664 ren2->dst_entry->processed = 1;
2665 ren2->processed = 1;
2666 if (strcmp(ren1_dst, ren2_dst) != 0) {
4f66dade 2667 rename_type = RENAME_ONE_FILE_TO_TWO;
461f5041 2668 clean_merge = 0;
9047ebbc 2669 } else {
4f66dade 2670 rename_type = RENAME_ONE_FILE_TO_ONE;
7769a75e
EN
2671 /* BUG: We should only remove ren1_src in
2672 * the base stage (think of rename +
2673 * add-source cases).
2674 */
259ccb6c 2675 remove_file(opt, 1, ren1_src, 1);
b8ddf164
EN
2676 update_entry(ren1->dst_entry,
2677 ren1->pair->one,
2678 ren1->pair->two,
2679 ren2->pair->two);
9047ebbc 2680 }
c336ab85 2681 setup_rename_conflict_info(rename_type, opt, ren1, ren2);
461f5041
EN
2682 } else if ((lookup = string_list_lookup(renames2Dst, ren1_dst))) {
2683 /* Two different files renamed to the same thing */
2684 char *ren2_dst;
2685 ren2 = lookup->util;
2686 ren2_dst = ren2->pair->two->path;
2687 if (strcmp(ren1_dst, ren2_dst) != 0)
033abf97 2688 BUG("ren1_dst != ren2_dst");
461f5041
EN
2689
2690 clean_merge = 0;
2691 ren2->processed = 1;
2692 /*
2693 * BUG: We should only mark src_entry as processed
2694 * if we are not dealing with a rename + add-source
2695 * case.
2696 */
2697 ren2->src_entry->processed = 1;
2698
2699 setup_rename_conflict_info(RENAME_TWO_FILES_TO_ONE,
c336ab85 2700 opt, ren1, ren2);
9047ebbc
MV
2701 } else {
2702 /* Renamed in 1, maybe changed in 2 */
9047ebbc
MV
2703 /* we only use sha1 and mode of these */
2704 struct diff_filespec src_other, dst_other;
41d70bd6 2705 int try_merge;
9047ebbc 2706
41d70bd6
EN
2707 /*
2708 * unpack_trees loads entries from common-commit
2709 * into stage 1, from head-commit into stage 2, and
2710 * from merge-commit into stage 3. We keep track
2711 * of which side corresponds to the rename.
2712 */
2713 int renamed_stage = a_renames == renames1 ? 2 : 3;
2714 int other_stage = a_renames == renames1 ? 3 : 2;
9047ebbc 2715
7769a75e
EN
2716 /* BUG: We should only remove ren1_src in the base
2717 * stage and in other_stage (think of rename +
2718 * add-source case).
2719 */
259ccb6c
EN
2720 remove_file(opt, 1, ren1_src,
2721 renamed_stage == 2 || !was_tracked(opt, ren1_src));
9047ebbc 2722
fd429e98 2723 oidcpy(&src_other.oid,
2724 &ren1->src_entry->stages[other_stage].oid);
41d70bd6 2725 src_other.mode = ren1->src_entry->stages[other_stage].mode;
fd429e98 2726 oidcpy(&dst_other.oid,
2727 &ren1->dst_entry->stages[other_stage].oid);
41d70bd6 2728 dst_other.mode = ren1->dst_entry->stages[other_stage].mode;
9047ebbc
MV
2729 try_merge = 0;
2730
9c0743fe 2731 if (oid_eq(&src_other.oid, &null_oid) &&
6d169fd3 2732 ren1->dir_rename_original_type == 'A') {
5455c338 2733 setup_rename_conflict_info(RENAME_VIA_DIR,
c336ab85 2734 opt, ren1, NULL);
9c0743fe 2735 } else if (oid_eq(&src_other.oid, &null_oid)) {
4f66dade 2736 setup_rename_conflict_info(RENAME_DELETE,
c336ab85 2737 opt, ren1, NULL);
d5af5105 2738 } else if ((dst_other.mode == ren1->pair->two->mode) &&
b4da9d62 2739 oid_eq(&dst_other.oid, &ren1->pair->two->oid)) {
35a74abf
EN
2740 /*
2741 * Added file on the other side identical to
2742 * the file being renamed: clean merge.
2743 * Also, there is no need to overwrite the
2744 * file already in the working copy, so call
2745 * update_file_flags() instead of
2746 * update_file().
2747 */
259ccb6c 2748 if (update_file_flags(opt,
8daec1df 2749 ren1->pair->two,
75456f96
JS
2750 ren1_dst,
2751 1, /* update_cache */
2752 0 /* update_wd */))
2753 clean_merge = -1;
b4da9d62 2754 } else if (!oid_eq(&dst_other.oid, &null_oid)) {
7f867165
EN
2755 /*
2756 * Probably not a clean merge, but it's
2757 * premature to set clean_merge to 0 here,
2758 * because if the rename merges cleanly and
2759 * the merge exactly matches the newly added
2760 * file, then the merge will be clean.
2761 */
2762 setup_rename_conflict_info(RENAME_ADD,
c336ab85 2763 opt, ren1, NULL);
9047ebbc
MV
2764 } else
2765 try_merge = 1;
2766
75456f96
JS
2767 if (clean_merge < 0)
2768 goto cleanup_and_return;
9047ebbc 2769 if (try_merge) {
e3de888c 2770 struct diff_filespec *o, *a, *b;
9047ebbc
MV
2771 src_other.path = (char *)ren1_src;
2772
e3de888c 2773 o = ren1->pair->one;
9047ebbc
MV
2774 if (a_renames == renames1) {
2775 a = ren1->pair->two;
2776 b = &src_other;
2777 } else {
2778 b = ren1->pair->two;
2779 a = &src_other;
2780 }
e3de888c 2781 update_entry(ren1->dst_entry, o, a, b);
4f66dade 2782 setup_rename_conflict_info(RENAME_NORMAL,
c336ab85 2783 opt, ren1, NULL);
9047ebbc
MV
2784 }
2785 }
2786 }
75456f96 2787cleanup_and_return:
9047ebbc
MV
2788 string_list_clear(&a_by_dst, 0);
2789 string_list_clear(&b_by_dst, 0);
2790
2791 return clean_merge;
2792}
2793
f172589e
EN
2794struct rename_info {
2795 struct string_list *head_renames;
2796 struct string_list *merge_renames;
2797};
2798
7fe40b88
EN
2799static void initial_cleanup_rename(struct diff_queue_struct *pairs,
2800 struct hashmap *dir_renames)
ffc16c49 2801{
7fe40b88
EN
2802 struct hashmap_iter iter;
2803 struct dir_rename_entry *e;
2804
2805 hashmap_iter_init(dir_renames, &iter);
2806 while ((e = hashmap_iter_next(&iter))) {
2807 free(e->dir);
2808 strbuf_release(&e->new_dir);
2809 /* possible_new_dirs already cleared in get_directory_renames */
2810 }
2811 hashmap_free(dir_renames, 1);
2812 free(dir_renames);
2813
ffc16c49
EN
2814 free(pairs->queue);
2815 free(pairs);
2816}
2817
259ccb6c 2818static int detect_and_process_renames(struct merge_options *opt,
8ebe7b05
EN
2819 struct tree *common,
2820 struct tree *head,
2821 struct tree *merge,
2822 struct string_list *entries,
2823 struct rename_info *ri)
f172589e 2824{
e5257b2a 2825 struct diff_queue_struct *head_pairs, *merge_pairs;
7fe40b88 2826 struct hashmap *dir_re_head, *dir_re_merge;
f6f77559 2827 int clean = 1;
e5257b2a 2828
3992ff0c
EN
2829 ri->head_renames = NULL;
2830 ri->merge_renames = NULL;
2831
259ccb6c 2832 if (!merge_detect_rename(opt))
3992ff0c
EN
2833 return 1;
2834
259ccb6c
EN
2835 head_pairs = get_diffpairs(opt, common, head);
2836 merge_pairs = get_diffpairs(opt, common, merge);
e5257b2a 2837
8e012516
DS
2838 if ((opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_TRUE) ||
2839 (opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_CONFLICT &&
2840 !opt->call_depth)) {
b53c5028
JK
2841 dir_re_head = get_directory_renames(head_pairs);
2842 dir_re_merge = get_directory_renames(merge_pairs);
7fe40b88 2843
259ccb6c 2844 handle_directory_level_conflicts(opt,
5fdddd9b
EN
2845 dir_re_head, head,
2846 dir_re_merge, merge);
2847 } else {
2848 dir_re_head = xmalloc(sizeof(*dir_re_head));
2849 dir_re_merge = xmalloc(sizeof(*dir_re_merge));
2850 dir_rename_init(dir_re_head);
2851 dir_rename_init(dir_re_merge);
2852 }
96e7ffbd 2853
c336ab85 2854 ri->head_renames = get_renames(opt, opt->branch1, head_pairs,
f6f77559
EN
2855 dir_re_merge, dir_re_head, head,
2856 common, head, merge, entries,
2857 &clean);
2858 if (clean < 0)
2859 goto cleanup;
c336ab85 2860 ri->merge_renames = get_renames(opt, opt->branch2, merge_pairs,
f6f77559
EN
2861 dir_re_head, dir_re_merge, merge,
2862 common, head, merge, entries,
2863 &clean);
2864 if (clean < 0)
2865 goto cleanup;
259ccb6c 2866 clean &= process_renames(opt, ri->head_renames, ri->merge_renames);
f6f77559
EN
2867
2868cleanup:
e5257b2a
EN
2869 /*
2870 * Some cleanup is deferred until cleanup_renames() because the
2871 * data structures are still needed and referenced in
2872 * process_entry(). But there are a few things we can free now.
2873 */
7fe40b88
EN
2874 initial_cleanup_rename(head_pairs, dir_re_head);
2875 initial_cleanup_rename(merge_pairs, dir_re_merge);
e5257b2a
EN
2876
2877 return clean;
f172589e
EN
2878}
2879
ffc16c49 2880static void final_cleanup_rename(struct string_list *rename)
f172589e 2881{
9cfee25a
EN
2882 const struct rename *re;
2883 int i;
f172589e 2884
3992ff0c
EN
2885 if (rename == NULL)
2886 return;
2887
9cfee25a
EN
2888 for (i = 0; i < rename->nr; i++) {
2889 re = rename->items[i].util;
2890 diff_free_filepair(re->pair);
2891 }
2892 string_list_clear(rename, 1);
2893 free(rename);
2894}
2895
ffc16c49 2896static void final_cleanup_renames(struct rename_info *re_info)
9cfee25a 2897{
ffc16c49
EN
2898 final_cleanup_rename(re_info->head_renames);
2899 final_cleanup_rename(re_info->merge_renames);
f172589e
EN
2900}
2901
259ccb6c 2902static int read_oid_strbuf(struct merge_options *opt,
d90e759f
EN
2903 const struct object_id *oid,
2904 struct strbuf *dst)
331a1838
EB
2905{
2906 void *buf;
2907 enum object_type type;
2908 unsigned long size;
b4f5aca4 2909 buf = read_object_file(oid, &type, &size);
331a1838 2910 if (!buf)
259ccb6c 2911 return err(opt, _("cannot read object %s"), oid_to_hex(oid));
331a1838
EB
2912 if (type != OBJ_BLOB) {
2913 free(buf);
259ccb6c 2914 return err(opt, _("object %s is not a blob"), oid_to_hex(oid));
331a1838
EB
2915 }
2916 strbuf_attach(dst, buf, size, size + 1);
2917 return 0;
2918}
2919
bc9204d4 2920static int blob_unchanged(struct merge_options *opt,
8daec1df
EN
2921 const struct diff_filespec *o,
2922 const struct diff_filespec *a,
3e7589b7 2923 int renormalize, const char *path)
331a1838 2924{
93a02c55
EN
2925 struct strbuf obuf = STRBUF_INIT;
2926 struct strbuf abuf = STRBUF_INIT;
331a1838 2927 int ret = 0; /* assume changed for safety */
93a02c55 2928 const struct index_state *idx = opt->repo->index;
331a1838 2929
8daec1df 2930 if (a->mode != o->mode)
72fac66b 2931 return 0;
8daec1df 2932 if (oid_eq(&o->oid, &a->oid))
331a1838 2933 return 1;
3e7589b7 2934 if (!renormalize)
331a1838
EB
2935 return 0;
2936
8daec1df
EN
2937 if (read_oid_strbuf(opt, &o->oid, &obuf) ||
2938 read_oid_strbuf(opt, &a->oid, &abuf))
331a1838
EB
2939 goto error_return;
2940 /*
2941 * Note: binary | is used so that both renormalizations are
2942 * performed. Comparison can be skipped if both files are
2943 * unchanged since their sha1s have already been compared.
2944 */
93a02c55
EN
2945 if (renormalize_buffer(idx, path, obuf.buf, obuf.len, &obuf) |
2946 renormalize_buffer(idx, path, abuf.buf, abuf.len, &abuf))
2947 ret = (obuf.len == abuf.len && !memcmp(obuf.buf, abuf.buf, obuf.len));
331a1838
EB
2948
2949error_return:
93a02c55
EN
2950 strbuf_release(&obuf);
2951 strbuf_release(&abuf);
331a1838
EB
2952 return ret;
2953}
2954
259ccb6c 2955static int handle_modify_delete(struct merge_options *opt,
d90e759f 2956 const char *path,
8daec1df
EN
2957 const struct diff_filespec *o,
2958 const struct diff_filespec *a,
2959 const struct diff_filespec *b)
5e3ce663 2960{
b26d87f2 2961 const char *modify_branch, *delete_branch;
8daec1df 2962 const struct diff_filespec *changed;
b26d87f2 2963
8daec1df 2964 if (is_valid(a)) {
259ccb6c
EN
2965 modify_branch = opt->branch1;
2966 delete_branch = opt->branch2;
8daec1df 2967 changed = a;
b26d87f2 2968 } else {
259ccb6c
EN
2969 modify_branch = opt->branch2;
2970 delete_branch = opt->branch1;
8daec1df 2971 changed = b;
b26d87f2
MM
2972 }
2973
259ccb6c 2974 return handle_change_delete(opt,
b26d87f2 2975 path, NULL,
8daec1df 2976 o, changed,
b26d87f2 2977 modify_branch, delete_branch,
75456f96 2978 _("modify"), _("modified"));
5e3ce663
EN
2979}
2980
e62d1123
EN
2981static int handle_content_merge(struct merge_file_info *mfi,
2982 struct merge_options *opt,
d9573556
EN
2983 const char *path,
2984 int is_dirty,
8daec1df
EN
2985 const struct diff_filespec *o,
2986 const struct diff_filespec *a,
2987 const struct diff_filespec *b,
043622b2 2988 struct rename_conflict_info *ci)
0c4918d1 2989{
55653a68 2990 const char *reason = _("content");
4ab9a157 2991 unsigned df_conflict_remains = 0;
0c4918d1 2992
8daec1df 2993 if (!is_valid(o))
55653a68 2994 reason = _("add/add");
8daec1df
EN
2995
2996 assert(o->path && a->path && b->path);
2997 if (ci && dir_in_way(opt->repo->index, path, !opt->call_depth,
2998 S_ISGITLINK(ci->ren1->pair->two->mode)))
2999 df_conflict_remains = 1;
3000
3001 if (merge_mode_and_contents(opt, o, a, b, path,
259ccb6c 3002 opt->branch1, opt->branch2,
e62d1123 3003 opt->call_depth * 2, mfi))
3c8a51e8 3004 return -1;
4ab9a157 3005
1de70dbd
EN
3006 /*
3007 * We can skip updating the working tree file iff:
3008 * a) The merge is clean
3009 * b) The merge matches what was in HEAD (content, mode, pathname)
3010 * c) The target path is usable (i.e. not involved in D/F conflict)
3011 */
e62d1123 3012 if (mfi->clean && was_tracked_and_matches(opt, path, &mfi->blob) &&
1de70dbd 3013 !df_conflict_remains) {
2b75fb60
EN
3014 int pos;
3015 struct cache_entry *ce;
3016
259ccb6c 3017 output(opt, 3, _("Skipped %s (merged same as existing)"), path);
e62d1123 3018 if (add_cacheinfo(opt, &mfi->blob, path,
259ccb6c 3019 0, (!opt->call_depth && !is_dirty), 0))
1de70dbd 3020 return -1;
2b75fb60
EN
3021 /*
3022 * However, add_cacheinfo() will delete the old cache entry
3023 * and add a new one. We need to copy over any skip_worktree
3024 * flag to avoid making the file appear as if it were
3025 * deleted by the user.
3026 */
259ccb6c
EN
3027 pos = index_name_pos(&opt->orig_index, path, strlen(path));
3028 ce = opt->orig_index.cache[pos];
2b75fb60 3029 if (ce_skip_worktree(ce)) {
259ccb6c
EN
3030 pos = index_name_pos(opt->repo->index, path, strlen(path));
3031 ce = opt->repo->index->cache[pos];
2b75fb60
EN
3032 ce->ce_flags |= CE_SKIP_WORKTREE;
3033 }
e62d1123 3034 return mfi->clean;
05cf21eb 3035 }
0c4918d1 3036
e62d1123
EN
3037 if (!mfi->clean) {
3038 if (S_ISGITLINK(mfi->blob.mode))
55653a68 3039 reason = _("submodule");
259ccb6c 3040 output(opt, 1, _("CONFLICT (%s): Merge conflict in %s"),
0c4918d1 3041 reason, path);
043622b2 3042 if (ci && !df_conflict_remains)
8daec1df 3043 if (update_stages(opt, path, o, a, b))
75456f96 3044 return -1;
0c4918d1
EN
3045 }
3046
bd42380e 3047 if (df_conflict_remains || is_dirty) {
3d6b8e88 3048 char *new_path;
259ccb6c
EN
3049 if (opt->call_depth) {
3050 remove_file_from_index(opt->repo->index, path);
51931bf0 3051 } else {
e62d1123 3052 if (!mfi->clean) {
8daec1df 3053 if (update_stages(opt, path, o, a, b))
75456f96
JS
3054 return -1;
3055 } else {
259ccb6c 3056 int file_from_stage2 = was_tracked(opt, path);
51931bf0 3057
259ccb6c 3058 if (update_stages(opt, path, NULL,
e62d1123
EN
3059 file_from_stage2 ? &mfi->blob : NULL,
3060 file_from_stage2 ? NULL : &mfi->blob))
75456f96 3061 return -1;
51931bf0
EN
3062 }
3063
3064 }
c336ab85 3065 new_path = unique_path(opt, path, ci->ren1->branch);
bd42380e 3066 if (is_dirty) {
259ccb6c 3067 output(opt, 1, _("Refusing to lose dirty file at %s"),
bd42380e
EN
3068 path);
3069 }
259ccb6c 3070 output(opt, 1, _("Adding as %s instead"), new_path);
e62d1123 3071 if (update_file(opt, 0, &mfi->blob, new_path)) {
75456f96
JS
3072 free(new_path);
3073 return -1;
3074 }
3d6b8e88 3075 free(new_path);
e62d1123
EN
3076 mfi->clean = 0;
3077 } else if (update_file(opt, mfi->clean, &mfi->blob, path))
75456f96 3078 return -1;
e62d1123 3079 return !is_dirty && mfi->clean;
0c4918d1
EN
3080}
3081
259ccb6c 3082static int handle_rename_normal(struct merge_options *opt,
8ebe7b05 3083 const char *path,
8daec1df
EN
3084 const struct diff_filespec *o,
3085 const struct diff_filespec *a,
3086 const struct diff_filespec *b,
8ebe7b05 3087 struct rename_conflict_info *ci)
64b1abe9 3088{
8c8e5bd6 3089 struct rename *ren = ci->ren1;
e62d1123 3090 struct merge_file_info mfi;
8c8e5bd6
EN
3091 int clean;
3092 int side = (ren->branch == opt->branch1 ? 2 : 3);
3093
64b1abe9 3094 /* Merge the content and write it out */
8c8e5bd6
EN
3095 clean = handle_content_merge(&mfi, opt, path, was_dirty(opt, path),
3096 o, a, b, ci);
3097
8e012516
DS
3098 if (clean &&
3099 opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_CONFLICT &&
8c8e5bd6
EN
3100 ren->dir_rename_original_dest) {
3101 if (update_stages(opt, path,
3102 NULL,
3103 side == 2 ? &mfi.blob : NULL,
3104 side == 2 ? NULL : &mfi.blob))
3105 return -1;
3106 clean = 0; /* not clean, but conflicted */
3107 }
3108 return clean;
3109}
3110
3111static void dir_rename_warning(const char *msg,
3112 int is_add,
3113 int clean,
3114 struct merge_options *opt,
3115 struct rename *ren)
3116{
3117 const char *other_branch;
3118 other_branch = (ren->branch == opt->branch1 ?
3119 opt->branch2 : opt->branch1);
3120 if (is_add) {
3121 output(opt, clean ? 2 : 1, msg,
3122 ren->pair->one->path, ren->branch,
3123 other_branch, ren->pair->two->path);
3124 return;
3125 }
3126 output(opt, clean ? 2 : 1, msg,
3127 ren->pair->one->path, ren->dir_rename_original_dest, ren->branch,
3128 other_branch, ren->pair->two->path);
3129}
3130static int warn_about_dir_renamed_entries(struct merge_options *opt,
3131 struct rename *ren)
3132{
3133 const char *msg;
3134 int clean = 1, is_add;
3135
3136 if (!ren)
3137 return clean;
3138
3139 /* Return early if ren was not affected/created by a directory rename */
3140 if (!ren->dir_rename_original_dest)
3141 return clean;
3142
3143 /* Sanity checks */
8e012516 3144 assert(opt->detect_directory_renames > MERGE_DIRECTORY_RENAMES_NONE);
8c8e5bd6
EN
3145 assert(ren->dir_rename_original_type == 'A' ||
3146 ren->dir_rename_original_type == 'R');
3147
3148 /* Check whether to treat directory renames as a conflict */
8e012516 3149 clean = (opt->detect_directory_renames == MERGE_DIRECTORY_RENAMES_TRUE);
8c8e5bd6
EN
3150
3151 is_add = (ren->dir_rename_original_type == 'A');
3152 if (ren->dir_rename_original_type == 'A' && clean) {
3153 msg = _("Path updated: %s added in %s inside a "
3154 "directory that was renamed in %s; moving it to %s.");
3155 } else if (ren->dir_rename_original_type == 'A' && !clean) {
3156 msg = _("CONFLICT (file location): %s added in %s "
3157 "inside a directory that was renamed in %s, "
3158 "suggesting it should perhaps be moved to %s.");
3159 } else if (ren->dir_rename_original_type == 'R' && clean) {
3160 msg = _("Path updated: %s renamed to %s in %s, inside a "
3161 "directory that was renamed in %s; moving it to %s.");
3162 } else if (ren->dir_rename_original_type == 'R' && !clean) {
3163 msg = _("CONFLICT (file location): %s renamed to %s in %s, "
3164 "inside a directory that was renamed in %s, "
3165 "suggesting it should perhaps be moved to %s.");
3166 } else {
3167 BUG("Impossible dir_rename_original_type/clean combination");
3168 }
3169 dir_rename_warning(msg, is_add, clean, opt, ren);
3170
3171 return clean;
0c4918d1
EN
3172}
3173
9047ebbc 3174/* Per entry merge function */
259ccb6c 3175static int process_entry(struct merge_options *opt,
8a2fce18 3176 const char *path, struct stage_data *entry)
9047ebbc 3177{
9047ebbc 3178 int clean_merge = 1;
259ccb6c 3179 int normalize = opt->renormalize;
8daec1df
EN
3180
3181 struct diff_filespec *o = &entry->stages[1];
3182 struct diff_filespec *a = &entry->stages[2];
3183 struct diff_filespec *b = &entry->stages[3];
3184 int o_valid = is_valid(o);
3185 int a_valid = is_valid(a);
3186 int b_valid = is_valid(b);
3187 o->path = a->path = b->path = (char*)path;
9047ebbc 3188
37348937 3189 entry->processed = 1;
4f66dade 3190 if (entry->rename_conflict_info) {
043622b2 3191 struct rename_conflict_info *ci = entry->rename_conflict_info;
8daec1df 3192 struct diff_filespec *temp;
8c8e5bd6
EN
3193 int path_clean;
3194
3195 path_clean = warn_about_dir_renamed_entries(opt, ci->ren1);
3196 path_clean &= warn_about_dir_renamed_entries(opt, ci->ren2);
8daec1df
EN
3197
3198 /*
3199 * For cases with a single rename, {o,a,b}->path have all been
3200 * set to the rename target path; we need to set two of these
3201 * back to the rename source.
3202 * For rename/rename conflicts, we'll manually fix paths below.
3203 */
3204 temp = (opt->branch1 == ci->ren1->branch) ? b : a;
3205 o->path = temp->path = ci->ren1->pair->one->path;
3206 if (ci->ren2) {
3207 assert(opt->branch1 == ci->ren1->branch);
3208 }
3209
043622b2 3210 switch (ci->rename_type) {
882fd11a 3211 case RENAME_NORMAL:
4f66dade 3212 case RENAME_ONE_FILE_TO_ONE:
8daec1df 3213 clean_merge = handle_rename_normal(opt, path, o, a, b,
043622b2 3214 ci);
882fd11a 3215 break;
5455c338 3216 case RENAME_VIA_DIR:
8c8e5bd6 3217 clean_merge = handle_rename_via_dir(opt, ci);
882fd11a 3218 break;
7f867165
EN
3219 case RENAME_ADD:
3220 /*
3221 * Probably unclean merge, but if the renamed file
3222 * merges cleanly and the result can then be
3223 * two-way merged cleanly with the added file, I
3224 * guess it's a clean merge?
3225 */
043622b2 3226 clean_merge = handle_rename_add(opt, ci);
7f867165 3227 break;
3b130adf
EN
3228 case RENAME_DELETE:
3229 clean_merge = 0;
e2d563df 3230 if (handle_rename_delete(opt, ci))
75456f96 3231 clean_merge = -1;
3b130adf 3232 break;
07413c5a 3233 case RENAME_ONE_FILE_TO_TWO:
8daec1df
EN
3234 /*
3235 * Manually fix up paths; note:
3236 * ren[12]->pair->one->path are equal.
3237 */
3238 o->path = ci->ren1->pair->one->path;
3239 a->path = ci->ren1->pair->two->path;
3240 b->path = ci->ren2->pair->two->path;
3241
07413c5a 3242 clean_merge = 0;
043622b2 3243 if (handle_rename_rename_1to2(opt, ci))
75456f96 3244 clean_merge = -1;
07413c5a 3245 break;
461f5041 3246 case RENAME_TWO_FILES_TO_ONE:
8daec1df
EN
3247 /*
3248 * Manually fix up paths; note,
3249 * ren[12]->pair->two->path are actually equal.
3250 */
3251 o->path = NULL;
3252 a->path = ci->ren1->pair->two->path;
3253 b->path = ci->ren2->pair->two->path;
3254
bbafc9c4
EN
3255 /*
3256 * Probably unclean merge, but if the two renamed
3257 * files merge cleanly and the two resulting files
3258 * can then be two-way merged cleanly, I guess it's
3259 * a clean merge?
3260 */
043622b2 3261 clean_merge = handle_rename_rename_2to1(opt, ci);
07413c5a
EN
3262 break;
3263 default:
3264 entry->processed = 0;
3265 break;
3266 }
8c8e5bd6
EN
3267 if (path_clean < clean_merge)
3268 clean_merge = path_clean;
8daec1df 3269 } else if (o_valid && (!a_valid || !b_valid)) {
edd2faf5 3270 /* Case A: Deleted in one */
8daec1df
EN
3271 if ((!a_valid && !b_valid) ||
3272 (!b_valid && blob_unchanged(opt, o, a, normalize, path)) ||
3273 (!a_valid && blob_unchanged(opt, o, b, normalize, path))) {
edd2faf5
EN
3274 /* Deleted in both or deleted in one and
3275 * unchanged in the other */
8daec1df 3276 if (a_valid)
259ccb6c 3277 output(opt, 2, _("Removing %s"), path);
edd2faf5 3278 /* do not touch working file if it did not exist */
8daec1df 3279 remove_file(opt, 1, path, !a_valid);
edd2faf5
EN
3280 } else {
3281 /* Modify/delete; deleted side may have put a directory in the way */
edd2faf5 3282 clean_merge = 0;
8daec1df 3283 if (handle_modify_delete(opt, path, o, a, b))
75456f96 3284 clean_merge = -1;
3d6b8e88 3285 }
8daec1df
EN
3286 } else if ((!o_valid && a_valid && !b_valid) ||
3287 (!o_valid && !a_valid && b_valid)) {
edd2faf5
EN
3288 /* Case B: Added in one. */
3289 /* [nothing|directory] -> ([nothing|directory], file) */
3290
9c0bbb50
EN
3291 const char *add_branch;
3292 const char *other_branch;
9c0bbb50 3293 const char *conf;
8daec1df 3294 const struct diff_filespec *contents;
37348937 3295
8daec1df 3296 if (a_valid) {
259ccb6c
EN
3297 add_branch = opt->branch1;
3298 other_branch = opt->branch2;
8daec1df 3299 contents = a;
55653a68 3300 conf = _("file/directory");
9c0bbb50 3301 } else {
259ccb6c
EN
3302 add_branch = opt->branch2;
3303 other_branch = opt->branch1;
8daec1df 3304 contents = b;
55653a68 3305 conf = _("directory/file");
9c0bbb50 3306 }
259ccb6c 3307 if (dir_in_way(opt->repo->index, path,
8daec1df 3308 !opt->call_depth && !S_ISGITLINK(a->mode),
c641ca67 3309 0)) {
259ccb6c 3310 char *new_path = unique_path(opt, path, add_branch);
9c0bbb50 3311 clean_merge = 0;
259ccb6c 3312 output(opt, 1, _("CONFLICT (%s): There is a directory with name %s in %s. "
55653a68 3313 "Adding %s as %s"),
9c0bbb50 3314 conf, path, other_branch, path, new_path);
8daec1df 3315 if (update_file(opt, 0, contents, new_path))
75456f96 3316 clean_merge = -1;
259ccb6c
EN
3317 else if (opt->call_depth)
3318 remove_file_from_index(opt->repo->index, path);
3d6b8e88 3319 free(new_path);
9c0bbb50 3320 } else {
259ccb6c 3321 output(opt, 2, _("Adding %s"), path);
35a74abf 3322 /* do not overwrite file if already present */
8daec1df 3323 if (update_file_flags(opt, contents, path, 1, !a_valid))
75456f96 3324 clean_merge = -1;
9c0bbb50 3325 }
8daec1df
EN
3326 } else if (a_valid && b_valid) {
3327 if (!o_valid) {
dcf28150 3328 /* Case C: Added in both (check for same permissions) */
259ccb6c 3329 output(opt, 1,
dcf28150
EN
3330 _("CONFLICT (add/add): Merge conflict in %s"),
3331 path);
259ccb6c 3332 clean_merge = handle_file_collision(opt,
dcf28150 3333 path, NULL, NULL,
259ccb6c
EN
3334 opt->branch1,
3335 opt->branch2,
8daec1df 3336 a, b);
dcf28150
EN
3337 } else {
3338 /* case D: Modified in both, but differently. */
e62d1123 3339 struct merge_file_info mfi;
dcf28150 3340 int is_dirty = 0; /* unpack_trees would have bailed if dirty */
e62d1123 3341 clean_merge = handle_content_merge(&mfi, opt, path,
dcf28150 3342 is_dirty,
8daec1df 3343 o, a, b, NULL);
dcf28150 3344 }
8daec1df 3345 } else if (!o_valid && !a_valid && !b_valid) {
edd2faf5
EN
3346 /*
3347 * this entry was deleted altogether. a_mode == 0 means
3348 * we had that path and want to actively remove it.
3349 */
8daec1df 3350 remove_file(opt, 1, path, !a->mode);
edd2faf5 3351 } else
033abf97 3352 BUG("fatal merge failure, shouldn't happen.");
37348937
EN
3353
3354 return clean_merge;
3355}
3356
98a1d3d8
EN
3357static int merge_trees_internal(struct merge_options *opt,
3358 struct tree *head,
3359 struct tree *merge,
3360 struct tree *common,
3361 struct tree **result)
9047ebbc 3362{
259ccb6c 3363 struct index_state *istate = opt->repo->index;
9047ebbc
MV
3364 int code, clean;
3365
259ccb6c
EN
3366 if (opt->subtree_shift) {
3367 merge = shift_tree_object(opt->repo, head, merge, opt->subtree_shift);
3368 common = shift_tree_object(opt->repo, head, common, opt->subtree_shift);
9047ebbc
MV
3369 }
3370
b4da9d62 3371 if (oid_eq(&common->object.oid, &merge->object.oid)) {
259ccb6c 3372 output(opt, 0, _("Already up to date!"));
9047ebbc
MV
3373 *result = head;
3374 return 1;
3375 }
3376
259ccb6c 3377 code = unpack_trees_start(opt, common, head, merge);
9047ebbc 3378
fadd069d 3379 if (code != 0) {
259ccb6c
EN
3380 if (show(opt, 4) || opt->call_depth)
3381 err(opt, _("merging of trees %s and %s failed"),
f2fd0760 3382 oid_to_hex(&head->object.oid),
3383 oid_to_hex(&merge->object.oid));
259ccb6c 3384 unpack_trees_finish(opt);
6003303a 3385 return -1;
fadd069d 3386 }
9047ebbc 3387
0d6caa2d 3388 if (unmerged_index(istate)) {
f172589e
EN
3389 struct string_list *entries;
3390 struct rename_info re_info;
9047ebbc 3391 int i;
fc65b00d
KW
3392 /*
3393 * Only need the hashmap while processing entries, so
3394 * initialize it here and free it when we are done running
3395 * through the entries. Keeping it in the merge_options as
3396 * opposed to decaring a local hashmap is for convenience
3397 * so that we don't have to pass it to around.
3398 */
4d7101e2
EN
3399 hashmap_init(&opt->current_file_dir_set, path_hashmap_cmp,
3400 NULL, 512);
259ccb6c
EN
3401 get_files_dirs(opt, head);
3402 get_files_dirs(opt, merge);
9047ebbc 3403
259ccb6c
EN
3404 entries = get_unmerged(opt->repo->index);
3405 clean = detect_and_process_renames(opt, common, head, merge,
8ebe7b05 3406 entries, &re_info);
259ccb6c 3407 record_df_conflict_files(opt, entries);
75456f96 3408 if (clean < 0)
e336bdc5 3409 goto cleanup;
edd2faf5 3410 for (i = entries->nr-1; 0 <= i; i--) {
9047ebbc
MV
3411 const char *path = entries->items[i].string;
3412 struct stage_data *e = entries->items[i].util;
75456f96 3413 if (!e->processed) {
259ccb6c 3414 int ret = process_entry(opt, path, e);
75456f96
JS
3415 if (!ret)
3416 clean = 0;
e336bdc5
KW
3417 else if (ret < 0) {
3418 clean = ret;
3419 goto cleanup;
3420 }
75456f96 3421 }
9047ebbc 3422 }
7edba4c4
JH
3423 for (i = 0; i < entries->nr; i++) {
3424 struct stage_data *e = entries->items[i].util;
3425 if (!e->processed)
033abf97 3426 BUG("unprocessed path??? %s",
7edba4c4
JH
3427 entries->items[i].string);
3428 }
9047ebbc 3429
93665365 3430 cleanup:
ffc16c49 3431 final_cleanup_renames(&re_info);
f172589e 3432
9047ebbc 3433 string_list_clear(entries, 1);
f172589e 3434 free(entries);
9047ebbc 3435
259ccb6c 3436 hashmap_free(&opt->current_file_dir_set, 1);
fc65b00d 3437
3f1c1c36 3438 if (clean < 0) {
259ccb6c 3439 unpack_trees_finish(opt);
e336bdc5 3440 return clean;
3f1c1c36 3441 }
9047ebbc
MV
3442 }
3443 else
3444 clean = 1;
3445
259ccb6c 3446 unpack_trees_finish(opt);
a35edc84 3447
724dd767
EN
3448 if (opt->call_depth &&
3449 !(*result = write_in_core_index_as_tree(opt->repo)))
fbc87eb5 3450 return -1;
9047ebbc
MV
3451
3452 return clean;
3453}
3454
3455static struct commit_list *reverse_commit_list(struct commit_list *list)
3456{
3457 struct commit_list *next = NULL, *current, *backup;
3458 for (current = list; current; current = backup) {
3459 backup = current->next;
3460 current->next = next;
3461 next = current;
3462 }
3463 return next;
3464}
3465
3466/*
3467 * Merge the commits h1 and h2, return the resulting virtual
3468 * commit object and a flag indicating the cleanness of the merge.
3469 */
98a1d3d8
EN
3470static int merge_recursive_internal(struct merge_options *opt,
3471 struct commit *h1,
3472 struct commit *h2,
3473 struct commit_list *ca,
3474 struct commit **result)
9047ebbc
MV
3475{
3476 struct commit_list *iter;
3477 struct commit *merged_common_ancestors;
156e1782 3478 struct tree *mrtree;
9047ebbc 3479 int clean;
743474cb
EN
3480 const char *ancestor_name;
3481 struct strbuf merge_base_abbrev = STRBUF_INIT;
3482
259ccb6c
EN
3483 if (show(opt, 4)) {
3484 output(opt, 4, _("Merging:"));
3485 output_commit_title(opt, h1);
3486 output_commit_title(opt, h2);
9047ebbc
MV
3487 }
3488
3489 if (!ca) {
2ce406cc 3490 ca = get_merge_bases(h1, h2);
9047ebbc
MV
3491 ca = reverse_commit_list(ca);
3492 }
3493
259ccb6c 3494 if (show(opt, 5)) {
e0453cd8
RT
3495 unsigned cnt = commit_list_count(ca);
3496
259ccb6c 3497 output(opt, 5, Q_("found %u common ancestor:",
e0453cd8 3498 "found %u common ancestors:", cnt), cnt);
9047ebbc 3499 for (iter = ca; iter; iter = iter->next)
259ccb6c 3500 output_commit_title(opt, iter->item);
9047ebbc
MV
3501 }
3502
3503 merged_common_ancestors = pop_commit(&ca);
3504 if (merged_common_ancestors == NULL) {
03f622c8
JN
3505 /* if there is no common ancestor, use an empty tree */
3506 struct tree *tree;
9047ebbc 3507
259ccb6c 3508 tree = lookup_tree(opt->repo, opt->repo->hash_algo->empty_tree);
4d7101e2
EN
3509 merged_common_ancestors = make_virtual_commit(opt->repo,
3510 tree, "ancestor");
743474cb
EN
3511 ancestor_name = "empty tree";
3512 } else if (ca) {
3513 ancestor_name = "merged common ancestors";
3514 } else {
3515 strbuf_add_unique_abbrev(&merge_base_abbrev,
3516 &merged_common_ancestors->object.oid,
3517 DEFAULT_ABBREV);
3518 ancestor_name = merge_base_abbrev.buf;
9047ebbc
MV
3519 }
3520
3521 for (iter = ca; iter; iter = iter->next) {
8a2fce18 3522 const char *saved_b1, *saved_b2;
259ccb6c 3523 opt->call_depth++;
9047ebbc
MV
3524 /*
3525 * When the merge fails, the result contains files
3526 * with conflict markers. The cleanness flag is
de8946de
JS
3527 * ignored (unless indicating an error), it was never
3528 * actually used, as result of merge_trees has always
3529 * overwritten it: the committed "conflicts" were
3530 * already resolved.
9047ebbc 3531 */
259ccb6c
EN
3532 discard_index(opt->repo->index);
3533 saved_b1 = opt->branch1;
3534 saved_b2 = opt->branch2;
3535 opt->branch1 = "Temporary merge branch 1";
3536 opt->branch2 = "Temporary merge branch 2";
98a1d3d8 3537 if (merge_recursive_internal(opt, merged_common_ancestors, iter->item,
de8946de
JS
3538 NULL, &merged_common_ancestors) < 0)
3539 return -1;
259ccb6c
EN
3540 opt->branch1 = saved_b1;
3541 opt->branch2 = saved_b2;
3542 opt->call_depth--;
9047ebbc
MV
3543
3544 if (!merged_common_ancestors)
259ccb6c 3545 return err(opt, _("merge returned no commit"));
9047ebbc
MV
3546 }
3547
259ccb6c
EN
3548 discard_index(opt->repo->index);
3549 if (!opt->call_depth)
3550 repo_read_index(opt->repo);
9047ebbc 3551
743474cb 3552 opt->ancestor = ancestor_name;
98a1d3d8
EN
3553 clean = merge_trees_internal(opt,
3554 repo_get_commit_tree(opt->repo, h1),
3555 repo_get_commit_tree(opt->repo, h2),
3556 repo_get_commit_tree(opt->repo,
3557 merged_common_ancestors),
3558 &mrtree);
743474cb 3559 strbuf_release(&merge_base_abbrev);
6999bc70 3560 if (clean < 0) {
259ccb6c 3561 flush_output(opt);
de8946de 3562 return clean;
6999bc70 3563 }
9047ebbc 3564
259ccb6c
EN
3565 if (opt->call_depth) {
3566 *result = make_virtual_commit(opt->repo, mrtree, "merged tree");
9047ebbc
MV
3567 commit_list_insert(h1, &(*result)->parents);
3568 commit_list_insert(h2, &(*result)->parents->next);
3569 }
259ccb6c
EN
3570 flush_output(opt);
3571 if (!opt->call_depth && opt->buffer_output < 2)
3572 strbuf_release(&opt->obuf);
9047ebbc
MV
3573 return clean;
3574}
3575
98a1d3d8
EN
3576static int merge_start(struct merge_options *opt, struct tree *head)
3577{
3578 struct strbuf sb = STRBUF_INIT;
3579
3580 if (repo_index_has_changes(opt->repo, head, &sb)) {
3581 err(opt, _("Your local changes to the following files would be overwritten by merge:\n %s"),
3582 sb.buf);
3583 strbuf_release(&sb);
3584 return -1;
3585 }
3586
3587 return 0;
3588}
3589
3590static void merge_finalize(struct merge_options *opt)
3591{
345480d1
EN
3592 if (show(opt, 2))
3593 diff_warn_rename_limit("merge.renamelimit",
3594 opt->needed_rename_limit, 0);
98a1d3d8
EN
3595}
3596
3597int merge_trees(struct merge_options *opt,
3598 struct tree *head,
3599 struct tree *merge,
b4db8a2b 3600 struct tree *common)
98a1d3d8
EN
3601{
3602 int clean;
b4db8a2b 3603 struct tree *ignored;
98a1d3d8
EN
3604
3605 assert(opt->ancestor != NULL);
3606
3607 if (merge_start(opt, head))
3608 return -1;
b4db8a2b 3609 clean = merge_trees_internal(opt, head, merge, common, &ignored);
98a1d3d8
EN
3610 merge_finalize(opt);
3611
3612 return clean;
3613}
3614
3615int merge_recursive(struct merge_options *opt,
3616 struct commit *h1,
3617 struct commit *h2,
3618 struct commit_list *ca,
3619 struct commit **result)
3620{
3621 int clean;
3622
3623 assert(opt->ancestor == NULL);
3624
3625 if (merge_start(opt, repo_get_commit_tree(opt->repo, h1)))
3626 return -1;
3627 clean = merge_recursive_internal(opt, h1, h2, ca, result);
3628 merge_finalize(opt);
3629
3630 return clean;
3631}
3632
4d7101e2
EN
3633static struct commit *get_ref(struct repository *repo,
3634 const struct object_id *oid,
d7cf3a96 3635 const char *name)
73118f89
SB
3636{
3637 struct object *object;
3638
d7cf3a96
NTND
3639 object = deref_tag(repo, parse_object(repo, oid),
3640 name, strlen(name));
73118f89
SB
3641 if (!object)
3642 return NULL;
3643 if (object->type == OBJ_TREE)
d7cf3a96 3644 return make_virtual_commit(repo, (struct tree*)object, name);
73118f89
SB
3645 if (object->type != OBJ_COMMIT)
3646 return NULL;
3647 if (parse_commit((struct commit *)object))
3648 return NULL;
3649 return (struct commit *)object;
3650}
3651
259ccb6c 3652int merge_recursive_generic(struct merge_options *opt,
4e8161a8 3653 const struct object_id *head,
3654 const struct object_id *merge,
8a2fce18 3655 int num_base_list,
4e8161a8 3656 const struct object_id **base_list,
8a2fce18 3657 struct commit **result)
73118f89 3658{
03b86647 3659 int clean;
837e34eb 3660 struct lock_file lock = LOCK_INIT;
259ccb6c
EN
3661 struct commit *head_commit = get_ref(opt->repo, head, opt->branch1);
3662 struct commit *next_commit = get_ref(opt->repo, merge, opt->branch2);
73118f89
SB
3663 struct commit_list *ca = NULL;
3664
3665 if (base_list) {
3666 int i;
8a2fce18 3667 for (i = 0; i < num_base_list; ++i) {
73118f89 3668 struct commit *base;
4d7101e2
EN
3669 if (!(base = get_ref(opt->repo, base_list[i],
3670 oid_to_hex(base_list[i]))))
259ccb6c 3671 return err(opt, _("Could not parse object '%s'"),
d90e759f 3672 oid_to_hex(base_list[i]));
73118f89
SB
3673 commit_list_insert(base, &ca);
3674 }
3675 }
3676
259ccb6c
EN
3677 repo_hold_locked_index(opt->repo, &lock, LOCK_DIE_ON_ERROR);
3678 clean = merge_recursive(opt, head_commit, next_commit, ca,
d90e759f 3679 result);
51d3f43d
3680 if (clean < 0) {
3681 rollback_lock_file(&lock);
de8946de 3682 return clean;
51d3f43d 3683 }
de8946de 3684
259ccb6c 3685 if (write_locked_index(opt->repo->index, &lock,
61000814 3686 COMMIT_LOCK | SKIP_IF_UNCHANGED))
259ccb6c 3687 return err(opt, _("Unable to write index."));
73118f89
SB
3688
3689 return clean ? 0 : 1;
3690}
3691
259ccb6c 3692static void merge_recursive_config(struct merge_options *opt)
9047ebbc 3693{
85b46030 3694 char *value = NULL;
259ccb6c
EN
3695 git_config_get_int("merge.verbosity", &opt->verbosity);
3696 git_config_get_int("diff.renamelimit", &opt->diff_rename_limit);
3697 git_config_get_int("merge.renamelimit", &opt->merge_rename_limit);
85b46030 3698 if (!git_config_get_string("diff.renames", &value)) {
259ccb6c 3699 opt->diff_detect_rename = git_config_rename("diff.renames", value);
85b46030
BP
3700 free(value);
3701 }
3702 if (!git_config_get_string("merge.renames", &value)) {
259ccb6c 3703 opt->merge_detect_rename = git_config_rename("merge.renames", value);
85b46030
BP
3704 free(value);
3705 }
8c8e5bd6
EN
3706 if (!git_config_get_string("merge.directoryrenames", &value)) {
3707 int boolval = git_parse_maybe_bool(value);
3708 if (0 <= boolval) {
8e012516
DS
3709 opt->detect_directory_renames = boolval ?
3710 MERGE_DIRECTORY_RENAMES_TRUE :
3711 MERGE_DIRECTORY_RENAMES_NONE;
8c8e5bd6 3712 } else if (!strcasecmp(value, "conflict")) {
8e012516
DS
3713 opt->detect_directory_renames =
3714 MERGE_DIRECTORY_RENAMES_CONFLICT;
8c8e5bd6 3715 } /* avoid erroring on values from future versions of git */
85b46030
BP
3716 free(value);
3717 }
0e7bcb1b 3718 git_config(git_xmerge_config, NULL);
9047ebbc
MV
3719}
3720
259ccb6c 3721void init_merge_options(struct merge_options *opt,
0d6caa2d 3722 struct repository *repo)
9047ebbc 3723{
80486220 3724 const char *merge_verbosity;
259ccb6c
EN
3725 memset(opt, 0, sizeof(struct merge_options));
3726 opt->repo = repo;
3727 opt->verbosity = 2;
3728 opt->buffer_output = 1;
3729 opt->diff_rename_limit = -1;
3730 opt->merge_rename_limit = -1;
3731 opt->renormalize = 0;
3732 opt->diff_detect_rename = -1;
3733 opt->merge_detect_rename = -1;
8e012516 3734 opt->detect_directory_renames = MERGE_DIRECTORY_RENAMES_CONFLICT;
259ccb6c 3735 merge_recursive_config(opt);
80486220
AO
3736 merge_verbosity = getenv("GIT_MERGE_VERBOSITY");
3737 if (merge_verbosity)
259ccb6c
EN
3738 opt->verbosity = strtol(merge_verbosity, NULL, 10);
3739 if (opt->verbosity >= 5)
3740 opt->buffer_output = 0;
3741 strbuf_init(&opt->obuf, 0);
3742 string_list_init(&opt->df_conflict_file_set, 1);
9047ebbc 3743}
635a7bb1 3744
259ccb6c 3745int parse_merge_opt(struct merge_options *opt, const char *s)
635a7bb1 3746{
95b567c7
JK
3747 const char *arg;
3748
635a7bb1
JN
3749 if (!s || !*s)
3750 return -1;
3751 if (!strcmp(s, "ours"))
259ccb6c 3752 opt->recursive_variant = MERGE_RECURSIVE_OURS;
635a7bb1 3753 else if (!strcmp(s, "theirs"))
259ccb6c 3754 opt->recursive_variant = MERGE_RECURSIVE_THEIRS;
635a7bb1 3755 else if (!strcmp(s, "subtree"))
259ccb6c 3756 opt->subtree_shift = "";
95b567c7 3757 else if (skip_prefix(s, "subtree=", &arg))
259ccb6c 3758 opt->subtree_shift = arg;
58a1ece4 3759 else if (!strcmp(s, "patience"))
259ccb6c 3760 opt->xdl_opts = DIFF_WITH_ALG(opt, PATIENCE_DIFF);
8c912eea 3761 else if (!strcmp(s, "histogram"))
259ccb6c 3762 opt->xdl_opts = DIFF_WITH_ALG(opt, HISTOGRAM_DIFF);
95b567c7
JK
3763 else if (skip_prefix(s, "diff-algorithm=", &arg)) {
3764 long value = parse_algorithm_value(arg);
07924d4d
MP
3765 if (value < 0)
3766 return -1;
3767 /* clear out previous settings */
259ccb6c
EN
3768 DIFF_XDL_CLR(opt, NEED_MINIMAL);
3769 opt->xdl_opts &= ~XDF_DIFF_ALGORITHM_MASK;
3770 opt->xdl_opts |= value;
07924d4d 3771 }
4e5dd044 3772 else if (!strcmp(s, "ignore-space-change"))
259ccb6c 3773 DIFF_XDL_SET(opt, IGNORE_WHITESPACE_CHANGE);
4e5dd044 3774 else if (!strcmp(s, "ignore-all-space"))
259ccb6c 3775 DIFF_XDL_SET(opt, IGNORE_WHITESPACE);
4e5dd044 3776 else if (!strcmp(s, "ignore-space-at-eol"))
259ccb6c 3777 DIFF_XDL_SET(opt, IGNORE_WHITESPACE_AT_EOL);
e9282f02 3778 else if (!strcmp(s, "ignore-cr-at-eol"))
259ccb6c 3779 DIFF_XDL_SET(opt, IGNORE_CR_AT_EOL);
635a7bb1 3780 else if (!strcmp(s, "renormalize"))
259ccb6c 3781 opt->renormalize = 1;
635a7bb1 3782 else if (!strcmp(s, "no-renormalize"))
259ccb6c 3783 opt->renormalize = 0;
d2b11eca 3784 else if (!strcmp(s, "no-renames"))
259ccb6c 3785 opt->merge_detect_rename = 0;
87892f60 3786 else if (!strcmp(s, "find-renames")) {
259ccb6c
EN
3787 opt->merge_detect_rename = 1;
3788 opt->rename_score = 0;
87892f60 3789 }
1b47ad16
FGA
3790 else if (skip_prefix(s, "find-renames=", &arg) ||
3791 skip_prefix(s, "rename-threshold=", &arg)) {
259ccb6c 3792 if ((opt->rename_score = parse_rename_score(&arg)) == -1 || *arg != 0)
10ae7526 3793 return -1;
259ccb6c 3794 opt->merge_detect_rename = 1;
10ae7526 3795 }
5a59a230
NTND
3796 /*
3797 * Please update $__git_merge_strategy_options in
3798 * git-completion.bash when you add new options
3799 */
635a7bb1
JN
3800 else
3801 return -1;
3802 return 0;
3803}