]> git.ipfire.org Git - thirdparty/git.git/commitdiff
init: allow setting the default for the initial branch name via the config
authorDon Goodman-Wilson <don@goodman-wilson.com>
Wed, 24 Jun 2020 14:46:33 +0000 (14:46 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Jun 2020 16:14:21 +0000 (09:14 -0700)
We just introduced the command-line option
`--initial-branch=<branch-name>` to allow initializing a new repository
with a different initial branch than the hard-coded one.

To allow users to override the initial branch name more permanently
(i.e. without having to specify the name manually for each and every
`git init` invocation), let's introduce the `init.defaultBranch` config
setting.

Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Helped-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Don Goodman-Wilson <don@goodman-wilson.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/init.txt
builtin/init-db.c
refs.c
refs.h
t/t0001-init.sh

index 46fa8c6a0827abbd41bcaca49cf494f6b59db814..6ae4a38416ef6dbf992a39734e08132ab82c3ce1 100644 (file)
@@ -1,3 +1,7 @@
 init.templateDir::
        Specify the directory from which templates will be copied.
        (See the "TEMPLATE DIRECTORY" section of linkgit:git-init[1].)
+
+init.defaultBranch::
+       Allows overriding the default branch name when initializing
+       a new repository.
index 8fdfc334ac6e3801375b75915cfd608a0a026985..cee64823cbb500a8df0f19f486a2d3593492b1e6 100644 (file)
@@ -269,7 +269,7 @@ static int create_default_files(const char *template_path,
                char *ref;
 
                if (!initial_branch)
-                       initial_branch = "master";
+                       initial_branch = git_default_branch_name();
 
                ref = xstrfmt("refs/heads/%s", initial_branch);
                if (check_refname_format(ref, 0) < 0)
diff --git a/refs.c b/refs.c
index 224ff66c7bb0ef587cf2b34763586f53ad73bd84..b98dea5217318a940d5a21dbbf303fd327f1f0d4 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -560,6 +560,36 @@ void expand_ref_prefix(struct argv_array *prefixes, const char *prefix)
                argv_array_pushf(prefixes, *p, len, prefix);
 }
 
+char *repo_default_branch_name(struct repository *r)
+{
+       const char *config_key = "init.defaultbranch";
+       const char *config_display_key = "init.defaultBranch";
+       char *ret = NULL, *full_ref;
+
+       if (repo_config_get_string(r, config_key, &ret) < 0)
+               die(_("could not retrieve `%s`"), config_display_key);
+
+       if (!ret)
+               ret = xstrdup("master");
+
+       full_ref = xstrfmt("refs/heads/%s", ret);
+       if (check_refname_format(full_ref, 0))
+               die(_("invalid branch name: %s = %s"), config_display_key, ret);
+       free(full_ref);
+
+       return ret;
+}
+
+const char *git_default_branch_name(void)
+{
+       static char *ret;
+
+       if (!ret)
+               ret = repo_default_branch_name(the_repository);
+
+       return ret;
+}
+
 /*
  * *string and *len will only be substituted, and *string returned (for
  * later free()ing) if the string passed in is a magic short-hand form
diff --git a/refs.h b/refs.h
index a92d2c74c8306a25c0b6eab7624a06adae37a1b8..2e5146fd45e628c6e7882e7299ec1f63f7f425c5 100644 (file)
--- a/refs.h
+++ b/refs.h
@@ -154,6 +154,15 @@ int repo_dwim_log(struct repository *r, const char *str, int len, struct object_
 int dwim_ref(const char *str, int len, struct object_id *oid, char **ref);
 int dwim_log(const char *str, int len, struct object_id *oid, char **ref);
 
+/*
+ * Retrieves the default branch name for newly-initialized repositories.
+ *
+ * The return value of `repo_default_branch_name()` is an allocated string. The
+ * return value of `git_default_branch_name()` is a singleton.
+ */
+const char *git_default_branch_name(void);
+char *repo_default_branch_name(struct repository *r);
+
 /*
  * A ref_transaction represents a collection of reference updates that
  * should succeed or fail together.
index 386c06b5dd2ce99107f6276ab2e77662122f02f4..6d2467995e7afea65697d7540f2ef05cde54ae4b 100755 (executable)
@@ -477,4 +477,17 @@ test_expect_success '--initial-branch' '
        grep hello actual
 '
 
+test_expect_success 'overridden default initial branch name (config)' '
+       test_config_global init.defaultBranch nmb &&
+       git init initial-branch-config &&
+       git -C initial-branch-config symbolic-ref HEAD >actual &&
+       grep nmb actual
+'
+
+test_expect_success 'invalid default branch name' '
+       test_config_global init.defaultBranch "with space" &&
+       test_must_fail git init initial-branch-invalid 2>err &&
+       test_i18ngrep "invalid branch name" err
+'
+
 test_done