t6424: make sure a failed merge preserves local changes

We do make sure that an attempt to merge with various forms of local
changes will "fail", but the point of stopping the merge is so that
we refrain from discarding uncommitted local changes that could be
precious.  Add a few more checks for each case to make sure the
local changes are left intact.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano 2022-05-19 11:59:53 -07:00
parent d516b2db0a
commit 4b317450ce

View file

@ -71,7 +71,9 @@ test_expect_success 'ff update' '
git merge E^0 && git merge E^0 &&
test_must_fail git rev-parse HEAD:random_file && test_must_fail git rev-parse HEAD:random_file &&
test "$(git diff --name-only --cached E)" = "random_file" test "$(git diff --name-only --cached E)" = "random_file" &&
test_path_is_file random_file &&
git rev-parse --verify :random_file
' '
test_expect_success 'ff update, important file modified' ' test_expect_success 'ff update, important file modified' '
@ -83,6 +85,8 @@ test_expect_success 'ff update, important file modified' '
git add subdir/e && git add subdir/e &&
test_must_fail git merge E^0 && test_must_fail git merge E^0 &&
test_path_is_file subdir/e &&
git rev-parse --verify :subdir/e &&
test_path_is_missing .git/MERGE_HEAD test_path_is_missing .git/MERGE_HEAD
' '
@ -93,6 +97,8 @@ test_expect_success 'resolve, trivial' '
touch random_file && git add random_file && touch random_file && git add random_file &&
test_must_fail git merge -s resolve C^0 && test_must_fail git merge -s resolve C^0 &&
test_path_is_file random_file &&
git rev-parse --verify :random_file &&
test_path_is_missing .git/MERGE_HEAD test_path_is_missing .git/MERGE_HEAD
' '
@ -103,6 +109,8 @@ test_expect_success 'resolve, non-trivial' '
touch random_file && git add random_file && touch random_file && git add random_file &&
test_must_fail git merge -s resolve D^0 && test_must_fail git merge -s resolve D^0 &&
test_path_is_file random_file &&
git rev-parse --verify :random_file &&
test_path_is_missing .git/MERGE_HEAD test_path_is_missing .git/MERGE_HEAD
' '
@ -113,6 +121,8 @@ test_expect_success 'recursive' '
touch random_file && git add random_file && touch random_file && git add random_file &&
test_must_fail git merge -s recursive C^0 && test_must_fail git merge -s recursive C^0 &&
test_path_is_file random_file &&
git rev-parse --verify :random_file &&
test_path_is_missing .git/MERGE_HEAD test_path_is_missing .git/MERGE_HEAD
' '
@ -145,9 +155,12 @@ test_expect_success 'recursive, when file has staged changes not matching HEAD n
mkdir subdir && mkdir subdir &&
test_seq 1 10 >subdir/a && test_seq 1 10 >subdir/a &&
git add subdir/a && git add subdir/a &&
git rev-parse --verify :subdir/a >expect &&
# We have staged changes; merge should error out # We have staged changes; merge should error out
test_must_fail git merge -s recursive E^0 2>err && test_must_fail git merge -s recursive E^0 2>err &&
git rev-parse --verify :subdir/a >actual &&
test_cmp expect actual &&
test_i18ngrep "changes to the following files would be overwritten" err test_i18ngrep "changes to the following files would be overwritten" err
' '
@ -158,9 +171,12 @@ test_expect_success 'recursive, when file has staged changes matching what a mer
mkdir subdir && mkdir subdir &&
test_seq 1 11 >subdir/a && test_seq 1 11 >subdir/a &&
git add subdir/a && git add subdir/a &&
git rev-parse --verify :subdir/a >expect &&
# We have staged changes; merge should error out # We have staged changes; merge should error out
test_must_fail git merge -s recursive E^0 2>err && test_must_fail git merge -s recursive E^0 2>err &&
git rev-parse --verify :subdir/a >actual &&
test_cmp expect actual &&
test_i18ngrep "changes to the following files would be overwritten" err test_i18ngrep "changes to the following files would be overwritten" err
' '
@ -171,7 +187,9 @@ test_expect_success 'octopus, unrelated file touched' '
touch random_file && git add random_file && touch random_file && git add random_file &&
test_must_fail git merge C^0 D^0 && test_must_fail git merge C^0 D^0 &&
test_path_is_missing .git/MERGE_HEAD test_path_is_missing .git/MERGE_HEAD &&
git rev-parse --verify :random_file &&
test_path_exists random_file
' '
test_expect_success 'octopus, related file removed' ' test_expect_success 'octopus, related file removed' '
@ -181,6 +199,8 @@ test_expect_success 'octopus, related file removed' '
git rm b && git rm b &&
test_must_fail git merge C^0 D^0 && test_must_fail git merge C^0 D^0 &&
test_path_is_missing b &&
test_must_fail git rev-parse --verify :b &&
test_path_is_missing .git/MERGE_HEAD test_path_is_missing .git/MERGE_HEAD
' '
@ -189,8 +209,12 @@ test_expect_success 'octopus, related file modified' '
git checkout B^0 && git checkout B^0 &&
echo 12 >>a && git add a && echo 12 >>a && git add a &&
git rev-parse --verify :a >expect &&
test_must_fail git merge C^0 D^0 && test_must_fail git merge C^0 D^0 &&
test_path_is_file a &&
git rev-parse --verify :a >actual &&
test_cmp expect actual &&
test_path_is_missing .git/MERGE_HEAD test_path_is_missing .git/MERGE_HEAD
' '
@ -201,6 +225,8 @@ test_expect_success 'ours' '
touch random_file && git add random_file && touch random_file && git add random_file &&
test_must_fail git merge -s ours C^0 && test_must_fail git merge -s ours C^0 &&
test_path_is_file random_file &&
git rev-parse --verify :random_file &&
test_path_is_missing .git/MERGE_HEAD test_path_is_missing .git/MERGE_HEAD
' '
@ -211,6 +237,8 @@ test_expect_success 'subtree' '
touch random_file && git add random_file && touch random_file && git add random_file &&
test_must_fail git merge -s subtree E^0 && test_must_fail git merge -s subtree E^0 &&
test_path_is_file random_file &&
git rev-parse --verify :random_file &&
test_path_is_missing .git/MERGE_HEAD test_path_is_missing .git/MERGE_HEAD
' '