Junio C Hamano <gitster@xxxxxxxxx> writes: > This fix was about "we do not want to unconditionally drop the > advice messages when we reject the attempt to commit and show the > output like 'git status'", wasn't it? The earlier single-liner fix > in v1 that flips s->hints just before calling run_status() before > rejecting the attempt to commit was a lot easier to reason about, as > the fix was very focused and to the point. Why are we seeing this > many (seemingly unrelated) changes? In any case, here is what I tentatively have in my tree (with heavy rewrite to the proposed log message). -- >8 -- From: Heba Waly <heba.waly@xxxxxxxxx> Date: Tue, 17 Dec 2019 09:17:22 +0000 Subject: [PATCH] commit: honor advice.statusHints when rejecting an empty commit In ea9882bfc4 (commit: disable status hints when writing to COMMIT_EDITMSG, 2013-09-12) the intent was to disable status hints when writing to COMMIT_EDITMSG, because giving the hints in the "git status" like output in the commit message template are too late to be useful (they say things like "'git add' to stage", but that is only possible after aborting the current "git commit" session). But there is one case that the hints can be useful: When the current attempt to commit is rejected because no change is recorded in the index. The message is given and "git commit" errors out, so the hints can immediately be followed by the user. Teach the codepath to honor the configuration variable. Signed-off-by: Heba Waly <heba.waly@xxxxxxxxx> Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- builtin/commit.c | 1 + t/t7500-commit-template-squash-signoff.sh | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/builtin/commit.c b/builtin/commit.c index e588bc6ad3..0078faf117 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -944,6 +944,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix, */ if (!committable && whence != FROM_MERGE && !allow_empty && !(amend && is_a_merge(current_head))) { + s->hints = advice_status_hints; s->display_comment_prefix = old_display_comment_prefix; run_status(stdout, index_file, prefix, 0, s); if (amend) diff --git a/t/t7500-commit-template-squash-signoff.sh b/t/t7500-commit-template-squash-signoff.sh index 46a5cd4b73..a8179e4074 100755 --- a/t/t7500-commit-template-squash-signoff.sh +++ b/t/t7500-commit-template-squash-signoff.sh @@ -382,4 +382,13 @@ test_expect_success 'check commit with unstaged rename and copy' ' ) ' +test_expect_success 'commit without staging files fails and displays hints' ' + echo "initial" >>file && + git add file && + git commit -m initial && + echo "changes" >>file && + test_must_fail git commit -m update >actual && + test_i18ngrep "no changes added to commit (use \"git add\" and/or \"git commit -a\")" actual +' + test_done -- 2.24.1-732-ga9f9d4909c