merge-recursive: make sure when we say we abort that we actually abort

In commit 65170c07d4 ("merge-recursive: avoid incorporating uncommitted changes in a merge", 2017-12-21), it was noted that there was a special case when merge-recursive didn't rely on unpack_trees() to enforce the index == HEAD requirement, and thus that it needed to do that enforcement itself. Unfortunately, it returned the wrong exit status, signalling that the merge completed but had conflicts, rather than that it was aborted. Fix the return code, and while we're at it, change the error message to match what unpack_trees() would have printed. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Elijah Newren committed Jun 30, 2018 at 18:24 UTC 92702392cefdbd66ca593fa909540230ef9e005e
2 files changed +3 -3
merge-recursive.c
+2 -2
@@ -1984,9 +1984,9 @@ int merge_trees(struct merge_options *o,
1984 struct strbuf sb = STRBUF_INIT;
1985
1986 if (!o->call_depth && index_has_changes(&the_index, &sb)) {
1987 - err(o, _("Dirty index: cannot merge (dirty: %s)"),
1987 + err(o, _("Your local changes to the following files would be overwritten by merge:\n %s"),
1988 sb.buf);
1989 - return 0;
1989 + return -1;
1990 }
1991 output(o, 0, _("Already up to date!"));
1992 *result = head;
t/t6044-merge-unrelated-index-changes.sh
+1 -1
@@ -116,7 +116,7 @@ test_expect_success 'recursive' '
116 test_path_is_missing .git/MERGE_HEAD
117 '
118
119 -test_expect_failure 'recursive, when merge branch matches merge base' '
119 +test_expect_success 'recursive, when merge branch matches merge base' '
120 git reset --hard &&
121 git checkout B^0 &&
122