From 6b92493da4891e374b78377770e9883e763b75b0 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Mon, 23 Jul 2012 14:52:18 -0400 Subject: [PATCH] commit: give a hint when a commit message has been abandoned If we launch an editor for the user to create a commit message, they may put significant work into doing so. Typically we try to check common mistakes that could cause the commit to fail early, so that we die before the user goes to the trouble. We may still experience some errors afterwards, though; in this case, the user is given no hint that their commit message has been saved. Let's tell them where it is. Signed-off-by: Jeff King --- builtin/commit.c | 15 +++++++++++++++ t/t7500-commit-template-squash-signoff.sh | 3 +-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/builtin/commit.c b/builtin/commit.c index 9d8e1ea91a3272..8aab447a094a36 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -169,6 +169,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; @@ -1102,6 +1112,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 && @@ -1802,11 +1814,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); } @@ -1845,6 +1859,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 5fcaa0b4f2aa5e..0178283aaffa63 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' '