aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2024-06-27 09:19:58 -0700
committerJunio C Hamano <gitster@pobox.com>2024-06-27 09:19:58 -0700
commit6c0bfce914f951d673af91f0cad733b0d465fafb (patch)
treea706b53af1a3cc7d333bb9fb278c90f158ae5db9
parent1e1586e4ed626bde864339c10570bc0e73f0ab97 (diff)
parent2e5a63659301c46544fdb3c3e7a69b4693a2c384 (diff)
downloadgit-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.c2
-rwxr-xr-xt/t7600-merge.sh10
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 &&