|
|
|
@ -892,6 +892,7 @@ static int finish_automerge(struct commit *head,
@@ -892,6 +892,7 @@ static int finish_automerge(struct commit *head,
|
|
|
|
|
struct strbuf buf = STRBUF_INIT; |
|
|
|
|
struct object_id result_commit; |
|
|
|
|
|
|
|
|
|
write_tree_trivial(result_tree); |
|
|
|
|
free_commit_list(common); |
|
|
|
|
parents = remoteheads; |
|
|
|
|
if (!head_subsumed || fast_forward == FF_NO) |
|
|
|
@ -1586,8 +1587,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
@@ -1586,8 +1587,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
|
|
|
|
save_state(&stash)) |
|
|
|
|
oidclr(&stash); |
|
|
|
|
|
|
|
|
|
for (i = 0; i < use_strategies_nr; i++) { |
|
|
|
|
int ret; |
|
|
|
|
for (i = 0; !merge_was_ok && i < use_strategies_nr; i++) { |
|
|
|
|
int ret, cnt; |
|
|
|
|
if (i) { |
|
|
|
|
printf(_("Rewinding the tree to pristine...\n")); |
|
|
|
|
restore_state(&head_commit->object.oid, &stash); |
|
|
|
@ -1604,40 +1605,26 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
@@ -1604,40 +1605,26 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
|
|
|
|
ret = try_merge_strategy(use_strategies[i]->name, |
|
|
|
|
common, remoteheads, |
|
|
|
|
head_commit); |
|
|
|
|
if (!option_commit && !ret) { |
|
|
|
|
merge_was_ok = 1; |
|
|
|
|
/* |
|
|
|
|
* This is necessary here just to avoid writing |
|
|
|
|
* the tree, but later we will *not* exit with |
|
|
|
|
* status code 1 because merge_was_ok is set. |
|
|
|
|
*/ |
|
|
|
|
ret = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (ret) { |
|
|
|
|
/* |
|
|
|
|
* The backend exits with 1 when conflicts are |
|
|
|
|
* left to be resolved, with 2 when it does not |
|
|
|
|
* handle the given merge at all. |
|
|
|
|
*/ |
|
|
|
|
if (ret == 1) { |
|
|
|
|
int cnt = evaluate_result(); |
|
|
|
|
|
|
|
|
|
if (best_cnt <= 0 || cnt <= best_cnt) { |
|
|
|
|
best_strategy = use_strategies[i]->name; |
|
|
|
|
best_cnt = cnt; |
|
|
|
|
/* |
|
|
|
|
* The backend exits with 1 when conflicts are |
|
|
|
|
* left to be resolved, with 2 when it does not |
|
|
|
|
* handle the given merge at all. |
|
|
|
|
*/ |
|
|
|
|
if (ret < 2) { |
|
|
|
|
if (!ret) { |
|
|
|
|
if (option_commit) { |
|
|
|
|
/* Automerge succeeded. */ |
|
|
|
|
automerge_was_ok = 1; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
merge_was_ok = 1; |
|
|
|
|
} |
|
|
|
|
cnt = evaluate_result(); |
|
|
|
|
if (best_cnt <= 0 || cnt <= best_cnt) { |
|
|
|
|
best_strategy = use_strategies[i]->name; |
|
|
|
|
best_cnt = cnt; |
|
|
|
|
} |
|
|
|
|
if (merge_was_ok) |
|
|
|
|
break; |
|
|
|
|
else |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Automerge succeeded. */ |
|
|
|
|
write_tree_trivial(&result_tree); |
|
|
|
|
automerge_was_ok = 1; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|