Skip to content

Commit

Permalink
commit: give a hint when a commit message has been abandoned
Browse files Browse the repository at this point in the history
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 <peff@peff.net>
  • Loading branch information
peff committed Nov 8, 2023
1 parent dadef80 commit 501bdc8
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
15 changes: 15 additions & 0 deletions builtin/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 &&
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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));
Expand Down
3 changes: 1 addition & 2 deletions t/t7500-commit-template-squash-signoff.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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' '
Expand Down

0 comments on commit 501bdc8

Please sign in to comment.