summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2021-01-07 14:05:02 +0000
committerEdward Thomson <ethomson@edwardthomson.com>2021-01-07 14:05:02 +0000
commit3f4bc2132c933e1a1719555dde1207d4896f7a12 (patch)
treeaa61bf27654e3a6c1cd3d97cb982f749a1d0dc57
parent32350e89d8e3ca245def9ccee05aa21c92e10726 (diff)
downloadlibgit2-ethomson/empty_default_branch.tar.gz
repo: ignore empty init.defaultbranchethomson/empty_default_branch
The init.defaultbranch option may be set, but empty. In this case, we should ignore it instead of trying to set our default branch to `refs/heads/`.
-rw-r--r--src/repository.c3
-rw-r--r--tests/repo/init.c16
2 files changed, 18 insertions, 1 deletions
diff --git a/src/repository.c b/src/repository.c
index 948413d17..de1a89582 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -2092,7 +2092,8 @@ static int repo_init_head(const char *repo_dir, const char *given)
if (given) {
initial_head = given;
} else if ((error = git_config_open_default(&cfg)) >= 0 &&
- (error = git_config_get_string_buf(&cfg_branch, cfg, "init.defaultbranch")) >= 0) {
+ (error = git_config_get_string_buf(&cfg_branch, cfg, "init.defaultbranch")) >= 0 &&
+ *cfg_branch.ptr) {
initial_head = cfg_branch.ptr;
}
diff --git a/tests/repo/init.c b/tests/repo/init.c
index b86e09a58..01371ba78 100644
--- a/tests/repo/init.c
+++ b/tests/repo/init.c
@@ -688,3 +688,19 @@ void test_repo_init__defaultbranch_config(void)
git_reference_free(head);
}
+
+void test_repo_init__defaultbranch_config_empty(void)
+{
+ git_reference *head;
+
+ cl_set_cleanup(&cleanup_repository, "repo");
+
+ create_tmp_global_config("tmp_global_path", "init.defaultbranch", "");
+
+ cl_git_pass(git_repository_init(&g_repo, "repo", 0));
+ cl_git_pass(git_reference_lookup(&head, g_repo, "HEAD"));
+
+ cl_assert_equal_s("refs/heads/master", git_reference_symbolic_target(head));
+
+ git_reference_free(head);
+}