aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-07-19 11:30:23 -0700
committerJunio C Hamano <gitster@pobox.com>2019-07-19 11:30:23 -0700
commitdd0bc5b531f47e54d499e944db5276505319eaef (patch)
tree0574c30d44aebf3934f509c17626f27ca29f6c56
parentMerge branch 'jl/status-reduce-vertical-blank' (diff)
parentbuiltin/merge.c - cleanup of code in for-cycle that tests strategies (diff)
downloadgit-dd0bc5b531f47e54d499e944db5276505319eaef.tar.xz
git-dd0bc5b531f47e54d499e944db5276505319eaef.zip
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
-rw-r--r--builtin/merge.c53
1 files changed, 20 insertions, 33 deletions
diff --git a/builtin/merge.c b/builtin/merge.c
index aad5a9504c8..e2ccbc44e20 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;
}
/*