diff options
| author | Junio C Hamano <gitster@pobox.com> | 2024-06-27 09:19:58 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2024-06-27 09:19:58 -0700 |
| commit | 6c0bfce914f951d673af91f0cad733b0d465fafb (patch) | |
| tree | a706b53af1a3cc7d333bb9fb278c90f158ae5db9 | |
| parent | 1e1586e4ed626bde864339c10570bc0e73f0ab97 (diff) | |
| parent | 2e5a63659301c46544fdb3c3e7a69b4693a2c384 (diff) | |
| download | git-6c0bfce914f951d673af91f0cad733b0d465fafb.tar.xz | |
Merge branch 'kz/merge-fail-early-upon-refresh-failure'
When "git merge" sees that the index cannot be refreshed (e.g. due
to another process doing the same in the background), it died but
after writing MERGE_HEAD etc. files, which was useless for the
purpose to recover from the failure.
* kz/merge-fail-early-upon-refresh-failure:
merge: avoid write merge state when unable to write index
| -rw-r--r-- | builtin/merge.c | 2 | ||||
| -rwxr-xr-x | t/t7600-merge.sh | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/builtin/merge.c b/builtin/merge.c index fb3eb15b89..888166d604 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -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")) { diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh index e5ff073099..ef54cff4fa 100755 --- a/t/t7600-merge.sh +++ b/t/t7600-merge.sh @@ -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 && |
