diff --git a/builtin/commit.c b/builtin/commit.c index 781af2e206c106..8f9340ddeae083 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -175,6 +175,16 @@ static int opt_parse_porcelain(const struct option *opt, const char *arg, int un return 0; } +static int mention_abandoned_message; +static void maybe_mention_abandoned_message(void) +{ + if (!mention_abandoned_message) + return; + advise(_("Your commit message has been saved in '%s' and will be\n" + "overwritten by the next invocation of \"git commit\"."), + git_path_commit_editmsg()); +} + static int opt_parse_m(const struct option *opt, const char *arg, int unset) { struct strbuf *buf = opt->value; @@ -1107,6 +1117,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix, exit(1); } strvec_clear(&env); + atexit(maybe_mention_abandoned_message); + mention_abandoned_message = 1; } if (!no_verify && @@ -1811,11 +1823,13 @@ int cmd_commit(int argc, const char **argv, const char *prefix) if (message_is_empty(&sb, cleanup_mode) && !allow_empty_message) { rollback_index_files(); fprintf(stderr, _("Aborting commit due to empty commit message.\n")); + mention_abandoned_message = 0; exit(1); } if (template_untouched(&sb, template_file, cleanup_mode) && !allow_empty_message) { rollback_index_files(); fprintf(stderr, _("Aborting commit; you did not edit the message.\n")); + mention_abandoned_message = 0; exit(1); } @@ -1854,6 +1868,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix) die("%s", err.buf); } + mention_abandoned_message = 0; sequencer_post_commit_cleanup(the_repository, 0); unlink(git_path_merge_head(the_repository)); unlink(git_path_merge_msg(the_repository)); diff --git a/t/t7500-commit-template-squash-signoff.sh b/t/t7500-commit-template-squash-signoff.sh index 4dca8d97a772d6..c476a26235bb8c 100755 --- a/t/t7500-commit-template-squash-signoff.sh +++ b/t/t7500-commit-template-squash-signoff.sh @@ -396,13 +396,12 @@ test_expect_success 'consecutive amend! commits remove amend! line from commit m test_expect_success 'deny to create amend! commit if its commit msg body is empty' ' commit_for_rebase_autosquash_setup && - echo "Aborting commit due to empty commit message body." >expected && ( set_fake_editor && test_must_fail env FAKE_COMMIT_MESSAGE="amend! target message subject line" \ git commit --fixup=amend:HEAD~ 2>actual ) && - test_cmp expected actual + grep "Aborting commit due to empty commit message body" actual ' test_expect_success 'amend! commit allows empty commit msg body with --allow-empty-message' '