From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: Vsevolod Myalitsin <ub4nal@mail.ru>,
ben.knoble@gmail.com, git@vger.kernel.org
Subject: Re: [PATCH] advice: use global config for default branch name
Date: Wed, 09 Sep 2026 21:28:54 -0700 [thread overview]
Message-ID: <xmqq5x0d4tmh.fsf@gitster.g> (raw)
In-Reply-To: <20260909195132.GA182066@coredump.intra.peff.net> (Jeff King's message of "Wed, 9 Sep 2026 15:51:32 -0400")
Jeff King <peff@peff.net> writes:
> On Wed, Sep 09, 2026 at 11:51:03AM -0700, Junio C Hamano wrote:
>
>> > will. So there are many missed opportunities for offering the turn-off
>> > instructions. Nobody seems to have complained, which makes me wonder if
>> > the turn-off instructions would be annoyingly chatty if we printed them
>> > all the time. Most of those calls predate the addition if the turn-off
>> > instructions and advise_if_enabled(), which was added in 2020. I wonder
>> > how people would feel if we converted them all and started printing the
>> > turn-off instructions everywhere.
>>
>> Depends on how we do so, I guess. Do you mean we should rewrite
>> advise() call above to advice_if_enabled(), even though the check
>> for ADVICE_FOO token appear redundant?
>
> I mean we could mechanically rewrite:
>
> if (advice_enabled(ADVICE_FOO))
> advise(...);
>
> to:
>
> advise_if_enabled(ADVICE_FOO, ...);
Surely, and I think we are pretty much on the same page. Such a
mechanical rewrite is not too bad. Here is what I came up with:
$ edit tools/coccinelle/advice.cocci
$ make coccicheck
$ git add -N tools/coccinelle/advice.cocci
$ git apply .build/tools/coccinelle/ALL.cocci.patch
$ git add -p
Some of the hunks I simply accepted with (y), but most of them
needed (e)dit to make them presentable; otherwise we ended up
with too many overly long lines and losing some comments.
--- >8 ---
Subject: [PATCH] advice: use advise_if_enabled() more
One very common pattern is
if (advice_enabled(ADVICE_FOO))
advise(_("MESSAGE FOR FOO"));
but we have a perfect short-hand for that. Using coccinelle,
rewrite the above as
advise_if_enabled(ADVICE_FOO, _("MESSAGE FOR FOR"));
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
advice.c | 13 ++++---------
branch.c | 6 +++---
builtin/am.c | 4 ++--
builtin/checkout.c | 4 ++--
builtin/submodule--helper.c | 4 ++--
sequencer.c | 9 ++++-----
tools/coccinelle/advice.cocci | 7 +++++++
7 files changed, 24 insertions(+), 23 deletions(-)
create mode 100644 tools/coccinelle/advice.cocci
diff --git a/advice.c b/advice.c
index 63bf8b0c5f..c60b33ee33 100644
--- a/advice.c
+++ b/advice.c
@@ -216,13 +216,8 @@ int error_resolve_conflict(const char *me)
else
BUG("Unhandled conflict reason '%s'", me);
- if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
- /*
- * Message used both when 'git commit' fails and when
- * other commands doing a merge do.
- */
- advise(_("Fix them up in the work tree, and then use 'git add/rm <file>'\n"
- "as appropriate to mark resolution and make a commit."));
+ advice_if_enabled(ADVICE_RESOLVE_CONFLICT,
+ _("Fix them up in the work tree, and then use 'git add/rm <file>'\n" "as appropriate to mark resolution and make a commit."));
return -1;
}
@@ -235,8 +230,8 @@ void NORETURN die_resolve_conflict(const char *me)
void NORETURN die_conclude_merge(void)
{
error(_("You have not concluded your merge (MERGE_HEAD exists)."));
- if (advice_enabled(ADVICE_RESOLVE_CONFLICT))
- advise(_("Please, commit your changes before merging."));
+ advice_if_enabled(ADVICE_RESOLVE_CONFLICT,
+ _("Please, commit your changes before merging."));
die(_("Exiting because of unfinished merge."));
}
diff --git a/branch.c b/branch.c
index 22f4f46b96..a87facd311 100644
--- a/branch.c
+++ b/branch.c
@@ -812,9 +812,9 @@ void create_branches_recursively(struct repository *r, const char *name,
int code = die_message(
_("submodule '%s': unable to find submodule"),
submodule_entry_list.entries[i].submodule->name);
- if (advice_enabled(ADVICE_SUBMODULES_NOT_UPDATED))
- advise(_("You may try updating the submodules using 'git checkout --no-recurse-submodules %s && git submodule update --init'"),
- start_committish);
+ advice_if_enabled(ADVICE_SUBMODULES_NOT_UPDATED,
+ _("You may try updating the submodules using 'git checkout --no-recurse-submodules %s && git submodule update --init'"),
+ start_committish);
exit(code);
}
diff --git a/builtin/am.c b/builtin/am.c
index e9623b8307..6039b69475 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -1910,8 +1910,8 @@ static void am_run(struct am_state *state, int resume)
printf_ln(_("Patch failed at %s %.*s"), msgnum(state),
linelen(state->msg), state->msg);
- if (advice_enabled(ADVICE_AM_WORK_DIR))
- advise(_("Use 'git am --show-current-patch=diff' to see the failed patch"));
+ advice_if_enabled(ADVICE_AM_WORK_DIR,
+ _("Use 'git am --show-current-patch=diff' to see the failed patch"));
die_user_resolve(state);
}
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 2bc21aa49b..34f05d2381 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -1612,8 +1612,8 @@ static void die_expecting_a_branch(const struct branch_info *branch_info)
*/
code = die_message(_("a branch is expected, got '%s'"), branch_info->name);
- if (advice_enabled(ADVICE_SUGGEST_DETACHING_HEAD))
- advise(_("If you want to detach HEAD at the commit, try again with the --detach option."));
+ advice_if_enabled(ADVICE_SUGGEST_DETACHING_HEAD,
+ _("If you want to detach HEAD at the commit, try again with the --detach option."));
exit(code);
}
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index e7cd3225fa..5e4989a9aa 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -1806,8 +1806,8 @@ static int add_possible_reference_from_superproject(
} else {
switch (sas->error_mode) {
case SUBMODULE_ALTERNATE_ERROR_DIE:
- if (advice_enabled(ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE))
- advise(_(alternate_error_advice));
+ advice_if_enabled(ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE,
+ _(alternate_error_advice));
die(_("submodule '%s' cannot add alternate: %s"),
sas->submodule_name, err.buf);
case SUBMODULE_ALTERNATE_ERROR_INFO:
diff --git a/sequencer.c b/sequencer.c
index 65afd100d9..6d8be0c036 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -624,8 +624,8 @@ static int error_dirty_index(struct repository *repo, struct replay_opts *opts)
error(_("your local changes would be overwritten by %s."),
_(action_name(opts)));
- if (advice_enabled(ADVICE_COMMIT_BEFORE_MERGE))
- advise(_("commit your changes or stash them to proceed."));
+ advice_if_enabled(ADVICE_COMMIT_BEFORE_MERGE,
+ _("commit your changes or stash them to proceed."));
return -1;
}
@@ -3497,9 +3497,8 @@ static int create_seq_dir(struct repository *r)
}
if (in_progress_error) {
error("%s", in_progress_error);
- if (advice_enabled(ADVICE_SEQUENCER_IN_USE))
- advise(in_progress_advice,
- advise_skip ? "--skip | " : "");
+ advice_if_enabled(ADVICE_SEQUENCER_IN_USE, in_progress_advice,
+ advise_skip ? "--skip | " : "");
return -1;
}
if (mkdir(git_path_seq_dir(), 0777) < 0)
diff --git a/tools/coccinelle/advice.cocci b/tools/coccinelle/advice.cocci
new file mode 100644
index 0000000000..da4851c5d0
--- /dev/null
+++ b/tools/coccinelle/advice.cocci
@@ -0,0 +1,7 @@
+@@
+expression A;
+expression list args;
+@@
+-if (advice_enabled(A))
+- advise(args);
++advice_if_enabled(A, args);
--
2.55.0-967-gab67bff200
next prev parent reply other threads:[~2026-09-10 4:28 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-07 12:56 [PATCH] advice: use global config for default branch name Vsevolod Myalitsin
2026-09-08 13:35 ` Ben Knoble
2026-09-08 18:56 ` Vsevolod Myalitsin
2026-09-08 14:59 ` Ben Knoble
2026-09-08 19:56 ` R4NC
2026-09-08 16:24 ` D. Ben Knoble
2026-09-08 16:31 ` Junio C Hamano
2026-09-08 21:38 ` Vsevolod Myalitsin
2026-09-08 18:57 ` Junio C Hamano
2026-09-09 6:49 ` R4NC
2026-09-09 15:54 ` Jeff King
2026-09-09 18:51 ` Junio C Hamano
2026-09-09 19:51 ` Jeff King
2026-09-10 4:23 ` Junio C Hamano
2026-09-10 4:33 ` Jeff King
2026-09-10 12:18 ` Junio C Hamano
2026-09-10 16:31 ` Jeff King
2026-09-10 4:28 ` Junio C Hamano [this message]
2027-08-29 0:59 ` 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=xmqq5x0d4tmh.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=ben.knoble@gmail.com \
--cc=git@vger.kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.