Commit 4cc3b2cb by Edward Thomson

repo: add git_repository_initialbranch

Provide a helper function to get the initial branch for a repository,
respecting the `init.defaultBranch` configuration option, if set, and
returning the "default default" (currently `master`) otherwise.
parent e411aae3
......@@ -2354,6 +2354,40 @@ static int repo_contains_no_reference(git_repository *repo)
return error;
}
int git_repository_initialbranch(git_buf *out, git_repository *repo)
{
git_config *config;
git_config_entry *entry = NULL;
const char *branch;
int error;
if ((error = git_repository_config__weakptr(&config, repo)) < 0)
return error;
if ((error = git_config_get_entry(&entry, config, "init.defaultbranch")) == 0) {
branch = entry->value;
}
else if (error == GIT_ENOTFOUND) {
branch = GIT_BRANCH_DEFAULT;
}
else {
goto done;
}
if ((error = git_buf_puts(out, GIT_REFS_HEADS_DIR)) < 0 ||
(error = git_buf_puts(out, branch)) < 0)
goto done;
if (!git_reference_is_valid_name(out->ptr)) {
git_error_set(GIT_ERROR_INVALID, "the value of init.defaultBranch is not a valid reference name");
error = -1;
}
done:
git_config_entry_free(entry);
return error;
}
int git_repository_is_empty(git_repository *repo)
{
git_reference *head = NULL;
......
......@@ -232,4 +232,10 @@ extern size_t git_repository__reserved_names_posix_len;
bool git_repository__reserved_names(
git_buf **out, size_t *outlen, git_repository *repo, bool include_ntfs);
/*
* The default branch for the repository; the `init.defaultBranch`
* configuration option, if set, or `master` if it is not.
*/
int git_repository_initialbranch(git_buf *out, git_repository *repo);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment