diff options
| author | nulltoken <emeric.fermas@gmail.com> | 2011-08-08 13:40:17 +0200 |
|---|---|---|
| committer | Vicent Marti <tanoku@gmail.com> | 2011-09-15 01:13:50 +0200 |
| commit | 3601c4bfce3df04ebfc8668e5db531ded39280a9 (patch) | |
| tree | 4fa330a2dec46c10f296b6f95838c13dfc11ec9b | |
| parent | a9daa9bc166b1d6f7c8af78d406761c942ab47e4 (diff) | |
| download | libgit2-3601c4bfce3df04ebfc8668e5db531ded39280a9.tar.gz | |
repository: Add git_repository_head()
| -rw-r--r-- | include/git2/repository.h | 10 | ||||
| -rw-r--r-- | src/repository.c | 22 |
2 files changed, 27 insertions, 5 deletions
diff --git a/include/git2/repository.h b/include/git2/repository.h index e4326437f..fb9b09f7e 100644 --- a/include/git2/repository.h +++ b/include/git2/repository.h @@ -219,6 +219,16 @@ GIT_EXTERN(void) git_repository_free(git_repository *repo); GIT_EXTERN(int) git_repository_init(git_repository **repo_out, const char *path, unsigned is_bare); /** + * Retrieve and resolve the reference pointed at by HEAD. + * + * @param head_out pointer to the reference which will be retrieved + * @param repo a repository object + * + * @return 0 on success; error code otherwise + */ +GIT_EXTERN(int) git_repository_head(git_reference **head_out, git_repository *repo); + +/** * Check if a repository's HEAD is detached * * A repository's HEAD is detached when it points directly to a commit diff --git a/src/repository.c b/src/repository.c index 1b06c4f03..cbd73fe15 100644 --- a/src/repository.c +++ b/src/repository.c @@ -729,19 +729,31 @@ int git_repository_head_detached(git_repository *repo) return 1; } -int git_repository_head_orphan(git_repository *repo) +int git_repository_head(git_reference **head_out, git_repository *repo) { git_reference *ref; int error; + *head_out = NULL; + error = git_reference_lookup(&ref, repo, GIT_HEAD_FILE); if (error < GIT_SUCCESS) - return error; - - if (git_reference_type(ref) == GIT_REF_OID) - return 0; + return git__rethrow(GIT_ENOTAREPO, "Failed to locate the HEAD"); error = git_reference_resolve(&ref, ref); + if (error < GIT_SUCCESS) + return git__rethrow(error, "Failed to resolve the HEAD"); + + *head_out = ref; + return GIT_SUCCESS; +} + +int git_repository_head_orphan(git_repository *repo) +{ + git_reference *ref; + int error; + + error = git_repository_head(&ref, repo); return error == GIT_ENOTFOUND ? 1 : error; } |
