From: Junio C Hamano <gitster@pobox.com>
To: Vsevolod Myalitsin <ub4nal@mail.ru>
Cc: git@vger.kernel.org, gitster@pobox.me, peff@peff.net,
ben.knoble@gmail.org
Subject: Re: [PATCH v3] advice: use global config for default branch name
Date: Wed, 09 Sep 2026 13:50:50 -0700 [thread overview]
Message-ID: <xmqqse3ip2s5.fsf@gitster.g> (raw)
In-Reply-To: <20270829004959.90983-1-ub4nal@mail.ru> (Vsevolod Myalitsin's message of "Sun, 29 Aug 2027 03:49:58 +0300")
Vsevolod Myalitsin <ub4nal@mail.ru> writes:
> 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.
"""Use this new mechanism to suggest setting advice.defaultBranchName
in per-user configuration, not in per-repository configuration, as
it is way too late once a repository is initialized.""" or something
along that line is missing here.
> +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[] = {
> +};
Looking good.
> +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;
> + }
Style. In our codebase, switch and case are indented to the same
tabstop.
> + 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);
> }
The change to narrow the interface into vadvise() needs to be
described in the proposed log message.
Ideally, this would be a three-patch series. API change to
vadvise() would come first, and then the introduction of advice
scope mechanism, and finally making defaultBranchName a global
scope variable.
Other than that, the end shape looks good to me.
Thanks.
next prev parent reply other threads:[~2026-09-09 20:50 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2027-08-29 0:49 [PATCH v3] advice: use global config for default branch name Vsevolod Myalitsin
2026-09-09 20:27 ` 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 [this message]
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=xmqqse3ip2s5.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=ben.knoble@gmail.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.me \
--cc=peff@peff.net \
--cc=ub4nal@mail.ru \
/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