From bec9bb4b3918d2b3c7b91bbb116a667d5d6d298d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Justo?= Date: Thu, 11 Jan 2024 13:40:34 +0100 Subject: [PATCH] branch: make the advice to force-deleting a conditional one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The error message we show when the user tries to delete a not fully merged branch describes the error and gives a hint to the user: error: the branch 'foo' is not fully merged. If you are sure you want to delete it, run 'git branch -D foo'. Let's move the hint part so that it is displayed using the advice machinery: error: the branch 'foo' is not fully merged hint: If you are sure you want to delete it, run 'git branch -D foo' hint: Disable this message with "git config advice.forceDeleteBranch false" Signed-off-by: Rubén Justo Signed-off-by: Junio C Hamano --- Documentation/config/advice.txt | 3 +++ advice.c | 1 + advice.h | 1 + builtin/branch.c | 8 +++++--- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.txt index e0deaf3144..25c0917524 100644 --- a/Documentation/config/advice.txt +++ b/Documentation/config/advice.txt @@ -45,6 +45,9 @@ advice.*:: Advice shown when linkgit:git-fetch[1] takes a long time to calculate forced updates after ref updates, or to warn that the check is disabled. + forceDeleteBranch:: + Advice shown when a user tries to delete a not fully merged + branch without the force option set. ignoredHook:: Advice shown if a hook is ignored because the hook is not set as executable. diff --git a/advice.c b/advice.c index 03322caba0..f6e4c2f302 100644 --- a/advice.c +++ b/advice.c @@ -47,6 +47,7 @@ static struct { [ADVICE_DETACHED_HEAD] = { "detachedHead", 1 }, [ADVICE_DIVERGING] = { "diverging", 1 }, [ADVICE_FETCH_SHOW_FORCED_UPDATES] = { "fetchShowForcedUpdates", 1 }, + [ADVICE_FORCE_DELETE_BRANCH] = { "forceDeleteBranch", 1 }, [ADVICE_GRAFT_FILE_DEPRECATED] = { "graftFileDeprecated", 1 }, [ADVICE_IGNORED_HOOK] = { "ignoredHook", 1 }, [ADVICE_IMPLICIT_IDENTITY] = { "implicitIdentity", 1 }, diff --git a/advice.h b/advice.h index 74d44d1156..9d4f49ae38 100644 --- a/advice.h +++ b/advice.h @@ -21,6 +21,7 @@ enum advice_type { ADVICE_DETACHED_HEAD, ADVICE_DIVERGING, ADVICE_FETCH_SHOW_FORCED_UPDATES, + ADVICE_FORCE_DELETE_BRANCH, ADVICE_GRAFT_FILE_DEPRECATED, ADVICE_IGNORED_HOOK, ADVICE_IMPLICIT_IDENTITY, diff --git a/builtin/branch.c b/builtin/branch.c index 0a32d1b6c8..cfb63cce5f 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -24,6 +24,7 @@ #include "ref-filter.h" #include "worktree.h" #include "help.h" +#include "advice.h" #include "commit-reach.h" static const char * const builtin_branch_usage[] = { @@ -190,9 +191,10 @@ static int check_branch_commit(const char *branchname, const char *refname, return -1; } if (!force && !branch_merged(kinds, branchname, rev, head_rev)) { - error(_("the branch '%s' is not fully merged.\n" - "If you are sure you want to delete it, " - "run 'git branch -D %s'"), branchname, branchname); + error(_("the branch '%s' is not fully merged"), branchname); + advise_if_enabled(ADVICE_FORCE_DELETE_BRANCH, + _("If you are sure you want to delete it, " + "run 'git branch -D %s'"), branchname); return -1; } return 0;