Commit 62dd4d71 by Carlos Martín Nieto

annotated_commit: provide a constructor from a revspec

This extra constructor will be useful for the annotated versions of
ref-modifying functions, as it allows us to create a commit with the
extended sha syntax which was used to retrieve it.
parent 62d38a1d
......@@ -78,6 +78,23 @@ GIT_EXTERN(int) git_annotated_commit_lookup(
const git_oid *id);
/**
* Creates a `git_annotated_comit` from a revision string.
*
* See `man gitrevisions`, or
* http://git-scm.com/docs/git-rev-parse.html#_specifying_revisions for
* information on the syntax accepted.
*
* @param out pointer to store the git_annotated_commit result in
* @param repo repository that contains the given commit
* @param revspec the extended sha syntax string to use to lookup the commit
* @return 0 on success or error code
*/
GIT_EXTERN(int) git_annotated_commit_from_revspec(
git_annotated_commit **out,
git_repository *repo,
const char *revspec);
/**
* Gets the commit ID that the given `git_annotated_commit` refers to.
*
* @param commit the given annotated commit
......
......@@ -12,6 +12,7 @@
#include "git2/refs.h"
#include "git2/repository.h"
#include "git2/annotated_commit.h"
#include "git2/revparse.h"
static int annotated_commit_init(
git_annotated_commit **out,
......@@ -96,6 +97,33 @@ int git_annotated_commit_from_fetchhead(
return annotated_commit_init(out, repo, id, branch_name, remote_url);
}
int git_annotated_commit_from_revspec(
git_annotated_commit **out,
git_repository *repo,
const char *revspec)
{
git_object *obj, *commit;
int error;
assert(out && repo && revspec);
if ((error = git_revparse_single(&obj, repo, revspec)) < 0)
return error;
if ((error = git_object_peel(&commit, obj, GIT_OBJ_COMMIT))) {
git_object_free(obj);
return error;
}
error = annotated_commit_init(out, repo, git_object_id(commit), revspec, NULL);
git_object_free(obj);
git_object_free(commit);
return error;
}
const git_oid *git_annotated_commit_id(
const git_annotated_commit *annotated_commit)
{
......
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