summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElijah Newren <newren@gmail.com>2022-08-23 02:42:19 (GMT)
committerJunio C Hamano <gitster@pobox.com>2022-08-24 16:08:32 (GMT)
commitd3a9295ada961012bfe8582540e40a02e772aa09 (patch)
tree77cb15bd18a6428b438366bc18138e8dc1988818
parentfd59c5bdeeb50f18e86f36cbf7a0b82554621690 (diff)
downloadgit-d3a9295ada961012bfe8582540e40a02e772aa09.zip
git-d3a9295ada961012bfe8582540e40a02e772aa09.tar.gz
git-d3a9295ada961012bfe8582540e40a02e772aa09.tar.bz2
merge: only apply autostash when appropriate
If a merge failed and we are leaving conflicts in the working directory for the user to resolve, we should not attempt to apply any autostash. Further, if we fail to apply the autostash (because either the merge failed, or the user requested --no-commit), then we should instruct the user how to apply it later. Add a testcase verifying we have corrected this behavior. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/merge.c5
-rwxr-xr-xt/t7600-merge.sh9
2 files changed, 13 insertions, 1 deletions
diff --git a/builtin/merge.c b/builtin/merge.c
index f178f5a..bca91b8 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -492,7 +492,8 @@ static void finish(struct commit *head_commit,
/* Run a post-merge hook */
run_hooks_l("post-merge", squash ? "1" : "0", NULL);
- apply_autostash(git_path_merge_autostash(the_repository));
+ if (new_head)
+ apply_autostash(git_path_merge_autostash(the_repository));
strbuf_release(&reflog_message);
}
@@ -1754,6 +1755,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
"stopped before committing as requested\n"));
else
ret = suggest_conflicts();
+ if (autostash)
+ printf(_("When finished, apply stashed changes with `git stash pop`\n"));
done:
if (!automerge_was_ok) {
diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh
index f0f6fda..7c3f6ed 100755
--- a/t/t7600-merge.sh
+++ b/t/t7600-merge.sh
@@ -255,6 +255,15 @@ test_expect_success 'merge --squash c3 with c7' '
test_cmp expect actual
'
+test_expect_success 'merge --squash --autostash conflict does not attempt to apply autostash' '
+ git reset --hard c3 &&
+ >unrelated &&
+ git add unrelated &&
+ test_must_fail git merge --squash c7 --autostash >out 2>err &&
+ ! grep "Applying autostash resulted in conflicts." err &&
+ grep "When finished, apply stashed changes with \`git stash pop\`" out
+'
+
test_expect_success 'merge c3 with c7 with commit.cleanup = scissors' '
git config commit.cleanup scissors &&
git reset --hard c3 &&