merge-recursive: make sure when we say we abort that we actually abort
authorElijah Newren <newren@gmail.com>
Sun, 1 Jul 2018 01:24:59 +0000 (18:24 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Jul 2018 16:38:36 +0000 (09:38 -0700)
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>
merge-recursive.c
t/t6044-merge-unrelated-index-changes.sh
index 32529ca5b6afec8129be20037ee85cf8d8cdf5c2..2fb1bdb0107fb0b38aec873e8b75eaa95b68ba50 100644 (file)
@@ -1984,9 +1984,9 @@ int merge_trees(struct merge_options *o,
                struct strbuf sb = STRBUF_INIT;
 
                if (!o->call_depth && index_has_changes(&the_index, &sb)) {
-                       err(o, _("Dirty index: cannot merge (dirty: %s)"),
+                       err(o, _("Your local changes to the following files would be overwritten by merge:\n  %s"),
                            sb.buf);
-                       return 0;
+                       return -1;
                }
                output(o, 0, _("Already up to date!"));
                *result = head;
index 97f7460b02dec73573ac1f5a1873e0ae77b3260e..d55f1649f0f0f2f3a524bfb97c053ea50045b23b 100755 (executable)
@@ -116,7 +116,7 @@ test_expect_success 'recursive' '
        test_path_is_missing .git/MERGE_HEAD
 '
 
-test_expect_failure 'recursive, when merge branch matches merge base' '
+test_expect_success 'recursive, when merge branch matches merge base' '
        git reset --hard &&
        git checkout B^0 &&