[PATCH v4 2/3] advice: introduce advice scoping mechanism
From: Vsevolod Myalitsin <hidden>
Date: 2026-09-10 08:54:13
Subsystem:
the rest · Maintainer:
Linus Torvalds
The advice settings currently do not distinguish between configuration scopes. Add a scope hint to advice_setting so that an advice can recommend a specific configuration scope when disabling it. Use the existing enum config_scope to represent the scope, with CONFIG_SCOPE_UNKNOWN indicating that the default configuration scope should be used. Signed-off-by: Vsevolod Myalitsin <redacted> --- advice.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/advice.c b/advice.c
index b556c8b38e..12a68ea716 100644
--- a/advice.c
+++ b/advice.c@@ -42,6 +42,7 @@ enum advice_level { struct advice_setting { const char *key; + enum config_scope scope_hint; enum advice_level level; };
@@ -96,9 +97,16 @@ static struct advice_setting advice_setting[] = { [ADVICE_WORKTREE_ADD_ORPHAN] = { "worktreeAddOrphan" }, }; +/* + * TRANSLATORS: This is a command line that the user should run. + * Do not translate the part inside double quotes. + * The first %s is the config scope (e.g. " --global"), + * the second %s is the advice key (e.g. "defaultBranchName"). + */ + 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, const struct advice_setting *setting, va_list params)
@@ -109,8 +117,21 @@ static void vadvise(const char *advice, strbuf_vaddf(&buf, advice, params); if (setting && setting->level == ADVICE_LEVEL_NONE) { + const char *scope = ""; + switch (setting->scope_hint) { + case CONFIG_SCOPE_LOCAL: + case CONFIG_SCOPE_UNKNOWN: + break; + case CONFIG_SCOPE_GLOBAL: + scope = " --global"; + break; + case CONFIG_SCOPE_SYSTEM: + scope = " --system"; + break; + } strbuf_addf(&buf, turn_off_instructions, - setting->key); + scope, setting->key); + } for (cp = buf.buf; *cp; cp = np) { np = strchrnul(cp, '\n');
--
2.50.1