merge: avoid write merge state when unable to write index

Writing the merge state after the index write fails is meaningless and
could potentially cause Git to lose changes.

Signed-off-by: Kyle Zhao <kylezhao@tencent.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Kyle Zhao 2024-06-17 03:08:37 +00:00 committed by Junio C Hamano
parent 66ac6e4bcd
commit 2e5a636593
2 changed files with 11 additions and 1 deletions

View file

@ -703,7 +703,7 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
if (repo_refresh_and_write_index(the_repository, REFRESH_QUIET,
SKIP_IF_UNCHANGED, 0, NULL, NULL,
NULL) < 0)
return error(_("Unable to write index."));
die(_("Unable to write index."));
if (!strcmp(strategy, "recursive") || !strcmp(strategy, "subtree") ||
!strcmp(strategy, "ort")) {

View file

@ -236,6 +236,16 @@ test_expect_success 'merge c1 with c2' '
verify_parents $c1 $c2
'
test_expect_success 'merge c1 with c2 when index.lock exists' '
test_when_finished rm .git/index.lock &&
git reset --hard c1 &&
>.git/index.lock &&
test_must_fail git merge c2 &&
test_path_is_missing .git/MERGE_HEAD &&
test_path_is_missing .git/MERGE_MODE &&
test_path_is_missing .git/MERGE_MSG
'
test_expect_success 'merge --squash c3 with c7' '
git reset --hard c3 &&
test_must_fail git merge --squash c7 &&