From 9b431e5206652cf62ebb09dad4607989976e7748 Mon Sep 17 00:00:00 2001 From: Ryan Biesemeyer <ryan@xxxxxxxxxx> Date: Wed, 8 Jan 2014 00:46:41 +0000 Subject: [PATCH 1/2] merge: make prepare_to_commit responsible for write_merge_state When merging, make the prepare-commit-msg hook have access to the merge state in order to make decisions about the commit message it is preparing. Since `abort_commit` is *only* called after `write_merge_state`, and a successful commit *always* calls `drop_save` to clear the saved state, this change effectively ensures that the merge state is also available to the prepare-commit-msg hook and while the message is being edited. Signed-off-by: Ryan Biesemeyer <ryan@xxxxxxxxxx> --- builtin/merge.c | 3 ++- t/t7505-prepare-commit-msg-hook.sh | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/builtin/merge.c b/builtin/merge.c index 4941a6c..b7bfc9c 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -802,7 +802,6 @@ static void abort_commit(struct commit_list *remoteheads, const char *err_msg) error("%s", err_msg); fprintf(stderr, _("Not committing merge; use 'git commit' to complete the merge.\n")); - write_merge_state(remoteheads); exit(1); } @@ -816,6 +815,8 @@ N_("Please enter a commit message to explain why this merge is necessary,\n" static void prepare_to_commit(struct commit_list *remoteheads) { struct strbuf msg = STRBUF_INIT; + + write_merge_state(remoteheads); strbuf_addbuf(&msg, &merge_msg); strbuf_addch(&msg, '\n'); if (0 < option_edit) diff --git a/t/t7505-prepare-commit-msg-hook.sh b/t/t7505-prepare-commit-msg-hook.sh index 3573751..89cdfe8 100755 --- a/t/t7505-prepare-commit-msg-hook.sh +++ b/t/t7505-prepare-commit-msg-hook.sh @@ -181,5 +181,27 @@ test_expect_success 'with failing hook (merge)' ' test_must_fail git merge other ' +git merge --abort # cleanup, since the merge failed. + +test_expect_success 'should have MERGE_HEAD (merge)' ' + + git checkout -B other HEAD@{1} && + echo "more" >> file && + git add file && + rm -f "$HOOK" && + git commit -m other && + git checkout - && + write_script "$HOOK" <<-EOF + if [ -s "$(git rev-parse --git-dir)/MERGE_HEAD" ]; then + exit 0 + else + exit 1 + fi + EOF + git merge other && + test "`git log -1 --pretty=format:%s`" = "Merge branch '"'"'other'"'"'" && + test ! -s "$(git rev-parse --git-dir)/MERGE_HEAD" + +# ' test_done -- 1.8.5
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail