mirror of
https://git.proxmox.com/git/libgit2
synced 2026-01-04 15:17:48 +00:00
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.
This commit is contained in:
parent
62d38a1ddb
commit
62dd4d71db
@ -77,6 +77,23 @@ GIT_EXTERN(int) git_annotated_commit_lookup(
|
||||
git_repository *repo,
|
||||
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.
|
||||
*
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user