sequencer: allow the commit-msg hooks to run during a reword

The `reword` command used to call `git commit` in a manner that asks for
the prepare-commit-msg and commit-msg hooks to do their thing.

Converting that part of the interactive rebase to C code introduced the
regression where those hooks were no longer run.

Let's fix this.

Note: the flag is called `VERIFY_MSG` instead of the more intuitive
`RUN_COMMIT_MSG_HOOKS` to indicate that the flag suppresses the
`--no-verify` flag (which may do other things in the future in addition
to suppressing the commit message hooks, too).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johannes Schindelin 2017-03-23 17:07:17 +01:00 committed by Junio C Hamano
parent 789b3effec
commit b92ff6e814
2 changed files with 7 additions and 3 deletions

View File

@ -606,6 +606,7 @@ N_("you have staged changes in your working tree\n"
#define EDIT_MSG (1<<1)
#define AMEND_MSG (1<<2)
#define CLEANUP_MSG (1<<3)
#define VERIFY_MSG (1<<4)
/*
* If we are cherry-pick, and if the merge did not result in
@ -642,8 +643,9 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts,
}
argv_array_push(&cmd.args, "commit");
argv_array_push(&cmd.args, "-n");
if (!(flags & VERIFY_MSG))
argv_array_push(&cmd.args, "-n");
if ((flags & AMEND_MSG))
argv_array_push(&cmd.args, "--amend");
if (opts->gpg_sign)
@ -996,6 +998,8 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,
if (res || command != TODO_REWORD)
goto leave;
flags |= EDIT_MSG | AMEND_MSG;
if (command == TODO_REWORD)
flags |= VERIFY_MSG;
msg_file = NULL;
goto fast_forward_edit;
}
@ -1050,7 +1054,7 @@ static int do_pick_commit(enum todo_command command, struct commit *commit,
}
if (command == TODO_REWORD)
flags |= EDIT_MSG;
flags |= EDIT_MSG | VERIFY_MSG;
else if (is_fixup(command)) {
if (update_squash_messages(command, commit, opts))
return -1;

View File

@ -230,7 +230,7 @@ chmod +x reword-editor
REWORD_EDITOR="$(pwd)/reword-editor"
export REWORD_EDITOR
test_expect_failure 'hook is called for reword during `rebase -i`' '
test_expect_success 'hook is called for reword during `rebase -i`' '
GIT_SEQUENCE_EDITOR="\"$REWORD_EDITOR\"" git rebase -i HEAD^ &&
commit_msg_is "new message"