Browse Source

init: provide useful advice about init.defaultBranch

To give ample warning for users wishing to override Git's the fall-back
for an unconfigured `init.defaultBranch` (in case we decide to change it
in a future Git version), let's introduce some advice that is shown upon
`git init` when that value is not set.

Note: two test cases in Git's test suite want to verify that the
`stderr` output of `git init` is empty. It is now necessary to suppress
the advice, we now do that via the `init.defaultBranch` setting. While
not strictly necessary, we also set this to `false` in
`test_create_repo()`.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Johannes Schindelin 4 years ago committed by Junio C Hamano
parent
commit
675704c74d
  1. 18
      refs.c
  2. 9
      t/t0001-init.sh
  3. 2
      t/t1510-repo-setup.sh
  4. 4
      t/test-lib-functions.sh

18
refs.c

@ -562,6 +562,19 @@ void expand_ref_prefix(struct strvec *prefixes, const char *prefix) @@ -562,6 +562,19 @@ void expand_ref_prefix(struct strvec *prefixes, const char *prefix)
strvec_pushf(prefixes, *p, len, prefix);
}

static const char default_branch_name_advice[] = N_(
"Using '%s' as the name for the initial branch. This default branch name\n"
"is subject to change. To configure the initial branch name to use in all\n"
"of your new repositories, which will suppress this warning, call:\n"
"\n"
"\tgit config --global init.defaultBranch <name>\n"
"\n"
"Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
"'development'. The just-created branch can be renamed via this command:\n"
"\n"
"\tgit branch -m <name>\n"
);

char *repo_default_branch_name(struct repository *r, int quiet)
{
const char *config_key = "init.defaultbranch";
@ -574,8 +587,11 @@ char *repo_default_branch_name(struct repository *r, int quiet) @@ -574,8 +587,11 @@ char *repo_default_branch_name(struct repository *r, int quiet)
else if (repo_config_get_string(r, config_key, &ret) < 0)
die(_("could not retrieve `%s`"), config_display_key);

if (!ret)
if (!ret) {
ret = xstrdup("master");
if (!quiet)
advise(_(default_branch_name_advice), ret);
}

full_ref = xstrfmt("refs/heads/%s", ret);
if (check_refname_format(full_ref, 0))

9
t/t0001-init.sh

@ -163,7 +163,7 @@ test_expect_success 'reinit' ' @@ -163,7 +163,7 @@ test_expect_success 'reinit' '
(
mkdir again &&
cd again &&
git init >out1 2>err1 &&
git -c init.defaultBranch=initial init >out1 2>err1 &&
git init >out2 2>err2
) &&
test_i18ngrep "Initialized empty" again/out1 &&
@ -558,6 +558,13 @@ test_expect_success 'overridden default initial branch name (config)' ' @@ -558,6 +558,13 @@ test_expect_success 'overridden default initial branch name (config)' '
grep nmb actual
'

test_expect_success 'advice on unconfigured init.defaultBranch' '
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= git -c color.advice=always \
init unconfigured-default-branch-name 2>err &&
test_decode_color <err >decoded &&
test_i18ngrep "<YELLOW>hint: " decoded
'

test_expect_success 'overridden default main branch name (env)' '
test_config_global init.defaultBranch nmb &&
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=env git init main-branch-env &&

2
t/t1510-repo-setup.sh

@ -79,7 +79,7 @@ setup_repo () { @@ -79,7 +79,7 @@ setup_repo () {
name=$1 worktreecfg=$2 gitfile=$3 barecfg=$4 &&
sane_unset GIT_DIR GIT_WORK_TREE &&

git init "$name" &&
git -c init.defaultBranch=initial init "$name" &&
maybe_config "$name/.git/config" core.worktree "$worktreecfg" &&
maybe_config "$name/.git/config" core.bare "$barecfg" &&
mkdir -p "$name/sub/sub" &&

4
t/test-lib-functions.sh

@ -1202,7 +1202,9 @@ test_create_repo () { @@ -1202,7 +1202,9 @@ test_create_repo () {
mkdir -p "$repo"
(
cd "$repo" || error "Cannot setup test environment"
"${GIT_TEST_INSTALLED:-$GIT_EXEC_PATH}/git$X" init \
"${GIT_TEST_INSTALLED:-$GIT_EXEC_PATH}/git$X" -c \
init.defaultBranch="${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME-master}" \
init \
"--template=$GIT_BUILD_DIR/templates/blt/" >&3 2>&4 ||
error "cannot run git init -- have you built things yet?"
mv .git/hooks .git/hooks-disabled

Loading…
Cancel
Save