repository: Add git_repository_head()

This commit is contained in:
nulltoken 2011-08-08 13:40:17 +02:00 committed by Vicent Marti
parent a9daa9bc16
commit 3601c4bfce
2 changed files with 30 additions and 8 deletions

View File

@ -218,6 +218,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); 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 * Check if a repository's HEAD is detached
* *

View File

@ -729,19 +729,31 @@ int git_repository_head_detached(git_repository *repo)
return 1; return 1;
} }
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 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) int git_repository_head_orphan(git_repository *repo)
{ {
git_reference *ref; git_reference *ref;
int error; int error;
error = git_reference_lookup(&ref, repo, GIT_HEAD_FILE); error = git_repository_head(&ref, repo);
if (error < GIT_SUCCESS)
return error;
if (git_reference_type(ref) == GIT_REF_OID)
return 0;
error = git_reference_resolve(&ref, ref);
return error == GIT_ENOTFOUND ? 1 : error; return error == GIT_ENOTFOUND ? 1 : error;
} }