diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2020-07-13 10:08:23 +0100 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2020-08-03 11:53:20 +0100 |
commit | 4cc3b2cb9aed4a5d2b4e2740ffc6bbd69f0634cc (patch) | |
tree | d63b8dcbb22a80a5ec85bbd7138f999a4fe0dc4c | |
parent | e411aae3850c59b5c32b16e339c4ce8af284183a (diff) | |
download | libgit2-4cc3b2cb9aed4a5d2b4e2740ffc6bbd69f0634cc.tar.gz |
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.
-rw-r--r-- | src/repository.c | 34 | ||||
-rw-r--r-- | src/repository.h | 6 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/repository.c b/src/repository.c index f7789127a..e4a374d12 100644 --- a/src/repository.c +++ b/src/repository.c @@ -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; diff --git a/src/repository.h b/src/repository.h index d73e77d70..de009ba5e 100644 --- a/src/repository.h +++ b/src/repository.h @@ -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 |