advice: allow disabling default branch name advice

The default branch name advice message is displayed when `repo_default_branch_name()` is invoked and the `init.defaultBranch` config is not set. In this scenario, the advice message is always shown even if the `--no-advice` option is used. Adapt `repo_default_branch_name()` to allow the default branch name advice message to be disabled with the `--no-advice` option and corresponding configuration. Signed-off-by: Justin Tobler <jltobler@gmail.com> Acked-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Justin Tobler committed Mar 24, 2025 at 19:51 UTC ec0f362e869fc74c3c9f011ae2097daa1c938833
4 files changed +12 -1
advice.c
+1
@@ -51,6 +51,7 @@ static struct {
51 [ADVICE_AM_WORK_DIR] = { "amWorkDir" },
52 [ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME] = { "checkoutAmbiguousRemoteBranchName" },
53 [ADVICE_COMMIT_BEFORE_MERGE] = { "commitBeforeMerge" },
54 + [ADVICE_DEFAULT_BRANCH_NAME] = { "defaultBranchName" },
55 [ADVICE_DETACHED_HEAD] = { "detachedHead" },
56 [ADVICE_DIVERGING] = { "diverging" },
57 [ADVICE_FETCH_SET_HEAD_WARN] = { "fetchRemoteHEADWarn" },
advice.h
+1
@@ -18,6 +18,7 @@ enum advice_type {
18 ADVICE_AM_WORK_DIR,
19 ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME,
20 ADVICE_COMMIT_BEFORE_MERGE,
21 + ADVICE_DEFAULT_BRANCH_NAME,
22 ADVICE_DETACHED_HEAD,
23 ADVICE_DIVERGING,
24 ADVICE_FETCH_SET_HEAD_WARN,
refs.c
+2 -1
@@ -664,7 +664,8 @@ char *repo_default_branch_name(struct repository *r, int quiet)
664 if (!ret) {
665 ret = xstrdup("master");
666 if (!quiet)
667 - advise(_(default_branch_name_advice), ret);
667 + advise_if_enabled(ADVICE_DEFAULT_BRANCH_NAME,
668 + _(default_branch_name_advice), ret);
669 }
670
671 full_ref = xstrfmt("refs/heads/%s", ret);
t/t0001-init.sh
+8
@@ -830,6 +830,14 @@ test_expect_success 'advice on unconfigured init.defaultBranch' '
830 test_grep "<YELLOW>hint: " decoded
831 '
832
833 +test_expect_success 'advice on unconfigured init.defaultBranch disabled' '
834 + test_when_finished "rm -rf no-advice" &&
835 +
836 + GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= \
837 + git -c advice.defaultBranchName=false init no-advice 2>err &&
838 + test_grep ! "hint: " err
839 +'
840 +
841 test_expect_success 'overridden default main branch name (env)' '
842 test_config_global init.defaultBranch nmb &&
843 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=env git init main-branch-env &&