Git development
 help / color / mirror / Atom feed
From: Vsevolod Myalitsin <ub4nal@mail.ru>
To: git@vger.kernel.org
Cc: gitster@pobox.me, peff@peff.net, ben.knoble@gmail.org,
	Vsevolod Myalitsin <ub4nal@mail.ru>
Subject: [PATCH v3] advice: use global config for default branch name
Date: Sun, 29 Aug 2027 03:49:58 +0300	[thread overview]
Message-ID: <20270829004959.90983-1-ub4nal@mail.ru> (raw)

Some advice messages suggest disabling the advice with
"git config set advice.<name> false", even when the
corresponding configuration should be set at a different scope.

Add a scope hint to advice settings so that the suggested
command uses the appropriate config scope.

Pass the advice setting itself to vadvise() instead of passing
its fields separately. Use NULL for advise() calls that are not
associated with an advice setting.

Signed-off-by: Vsevolod Myalitsin <ub4nal@mail.ru>
---
 advice.c | 43 ++++++++++++++++++++++++++++++++-----------
 1 file changed, 32 insertions(+), 11 deletions(-)

diff --git a/advice.c b/advice.c
index 63bf8b0c5f..80cc388215 100644
--- a/advice.c
+++ b/advice.c
@@ -40,10 +40,19 @@ enum advice_level {
 	ADVICE_LEVEL_ENABLED,
 };
 
-static struct {
+enum advice_scope {
+	ADVICE_SCOPE_LOCAL = 0,
+	ADVICE_SCOPE_GLOBAL,
+	ADVICE_SCOPE_SYSTEM,
+};
+
+struct advice_setting {
 	const char *key;
+	enum advice_scope scope_hint;
 	enum advice_level level;
-} advice_setting[] = {
+};
+
+static struct advice_setting advice_setting[] = {
 	[ADVICE_ADD_EMBEDDED_REPO]			= { "addEmbeddedRepo" },
 	[ADVICE_ADD_EMPTY_PATHSPEC]			= { "addEmptyPathspec" },
 	[ADVICE_ADD_IGNORED_FILE]			= { "addIgnoredFile" },
@@ -51,7 +60,7 @@ static struct {
 	[ADVICE_AM_WORK_DIR] 				= { "amWorkDir" },
 	[ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME] 	= { "checkoutAmbiguousRemoteBranchName" },
 	[ADVICE_COMMIT_BEFORE_MERGE]			= { "commitBeforeMerge" },
-	[ADVICE_DEFAULT_BRANCH_NAME]			= { "defaultBranchName" },
+	[ADVICE_DEFAULT_BRANCH_NAME]			= { "defaultBranchName", ADVICE_SCOPE_GLOBAL },
 	[ADVICE_DETACHED_HEAD]				= { "detachedHead" },
 	[ADVICE_DIVERGING]				= { "diverging" },
 	[ADVICE_FETCH_SET_HEAD_WARN]			= { "fetchRemoteHEADWarn" },
@@ -96,18 +105,31 @@ static struct {
 
 static const char turn_off_instructions[] =
 N_("\n"
-   "Disable this message with \"git config set advice.%s false\"");
+   "Disable this message with \"git config set%s advice.%s false\"");
 
-static void vadvise(const char *advice, int display_instructions,
-		    const char *key, va_list params)
+static void vadvise(const char *advice,
+	const struct advice_setting *setting, va_list params)
 {
 	struct strbuf buf = STRBUF_INIT;
 	const char *cp, *np;
 
 	strbuf_vaddf(&buf, advice, params);
 
-	if (display_instructions)
-		strbuf_addf(&buf, turn_off_instructions, key);
+	if (setting && setting->level == 0) {
+		const char *scope = "";
+		switch (setting->scope_hint) {
+			case ADVICE_SCOPE_LOCAL:
+				break;
+			case ADVICE_SCOPE_GLOBAL:
+				scope = " --global";
+				break;
+			case ADVICE_SCOPE_SYSTEM:
+				scope = " --system";
+				break;
+		}
+		strbuf_addf(&buf, turn_off_instructions,
+				scope, setting->key);
+	}
 
 	for (cp = buf.buf; *cp; cp = np) {
 		np = strchrnul(cp, '\n');
@@ -126,7 +148,7 @@ void advise(const char *advice, ...)
 {
 	va_list params;
 	va_start(params, advice);
-	vadvise(advice, 0, "", params);
+	vadvise(advice, NULL, params);
 	va_end(params);
 }
 
@@ -155,8 +177,7 @@ void advise_if_enabled(enum advice_type type, const char *advice, ...)
 		return;
 
 	va_start(params, advice);
-	vadvise(advice, !advice_setting[type].level, advice_setting[type].key,
-		params);
+	vadvise(advice, &advice_setting[type], params);
 	va_end(params);
 }
 
-- 
2.50.1


             reply	other threads:[~2026-09-09 19:58 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2027-08-29  0:49 Vsevolod Myalitsin [this message]
2026-09-09 20:27 ` [PATCH v3] advice: use global config for default branch name Jeff King
2026-09-09 21:21   ` Junio C Hamano
2026-09-09 21:22   ` Vsevolod Myalitsin
2026-09-09 22:46     ` Jeff King
2026-09-10  4:43       ` Vsevolod Myalitsin
2026-09-09 20:50 ` Junio C Hamano
2026-09-09 21:30   ` Vsevolod Myalitsin
2026-09-09 22:31     ` Junio C Hamano
2026-09-10  8:53 ` [PATCH v4 0/3] defaultBranchName advice is useless Vsevolod Myalitsin
2026-09-10  8:53   ` [PATCH v4 1/3] advice: pass the entire advice_setting to vadvise() Vsevolod Myalitsin
2026-09-10 17:43     ` SZEDER Gábor
2026-09-10  8:53   ` [PATCH v4 2/3] advice: introduce advice scoping mechanism Vsevolod Myalitsin
2026-09-10 15:36     ` Junio C Hamano
2026-09-10 15:52       ` Jeff King
2026-09-10 17:54         ` Vsevolod Myalitsin
2026-09-10 19:05           ` Jeff King
2026-09-10 18:35         ` Junio C Hamano
2026-09-10 19:03           ` Jeff King
2026-09-10 19:54             ` Junio C Hamano
2026-09-10 20:11               ` Jeff King
2026-09-10 20:25                 ` Junio C Hamano
2026-09-12  8:12                   ` Vsevolod Myalitsin
2026-09-13 16:32                     ` Junio C Hamano
2026-09-10  8:53   ` [PATCH v4 3/3] advice: use global config for default branch name Vsevolod Myalitsin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20270829004959.90983-1-ub4nal@mail.ru \
    --to=ub4nal@mail.ru \
    --cc=ben.knoble@gmail.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.me \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox