diff options
author | Junio C Hamano <gitster@pobox.com> | 2019-07-19 11:30:23 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-07-19 11:30:23 -0700 |
commit | dd0bc5b531f47e54d499e944db5276505319eaef (patch) | |
tree | 0574c30d44aebf3934f509c17626f27ca29f6c56 /builtin | |
parent | Merge branch 'jl/status-reduce-vertical-blank' (diff) | |
parent | builtin/merge.c - cleanup of code in for-cycle that tests strategies (diff) | |
download | tgif-dd0bc5b531f47e54d499e944db5276505319eaef.tar.xz |
Merge branch 'ea/merge-code-cleanup'
A loop has been rewritten for conciseness and clarity.
* ea/merge-code-cleanup:
builtin/merge.c - cleanup of code in for-cycle that tests strategies
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/merge.c | 53 |
1 files changed, 20 insertions, 33 deletions
diff --git a/builtin/merge.c b/builtin/merge.c index aad5a9504c..e2ccbc44e2 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -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) 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) 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; } /* |