Commit bb278ceb3722ee57fd87835e93d2f896bfcb177f

Edward Thomson 2021-01-07T14:05:02

repo: ignore empty init.defaultbranch 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/`.

diff --git a/src/repository.c b/src/repository.c
index 513dbd6..a6bd18a 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -2078,7 +2078,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 ba00d29..b9715f9 100644
--- a/tests/repo/init.c
+++ b/tests/repo/init.c
@@ -681,3 +681,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(&_repo, "repo", 0));
+	cl_git_pass(git_reference_lookup(&head, _repo, "HEAD"));
+
+	cl_assert_equal_s("refs/heads/master", git_reference_symbolic_target(head));
+
+	git_reference_free(head);
+}