mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-06 17:20:22 +00:00
Add git_tag_create_frombuffer API
Expose the tag parsing capabilities already present in the library. Exporting this function makes it possible to implement the mktag command without duplicating this functionality. Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
This commit is contained in:
parent
c15e0db5a9
commit
7b4a16e2c8
@ -188,6 +188,20 @@ GIT_EXTERN(int) git_tag_create_o(
|
|||||||
const git_signature *tagger,
|
const git_signature *tagger,
|
||||||
const char *message);
|
const char *message);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new tag in the repository from a buffer
|
||||||
|
*
|
||||||
|
* @param oid Pointer where to store the OID of the newly created tag
|
||||||
|
*
|
||||||
|
* @param repo Repository where to store the tag
|
||||||
|
*
|
||||||
|
* @param buffer Raw tag data
|
||||||
|
*/
|
||||||
|
GIT_EXTERN(int) git_tag_create_frombuffer(
|
||||||
|
git_oid *oid,
|
||||||
|
git_repository *repo,
|
||||||
|
const char *buffer);
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
GIT_END_DECL
|
GIT_END_DECL
|
||||||
#endif
|
#endif
|
||||||
|
37
src/tag.c
37
src/tag.c
@ -241,6 +241,43 @@ int git_tag_create(
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int git_tag_create_frombuffer(git_oid *oid, git_repository *repo, const char *buffer)
|
||||||
|
{
|
||||||
|
git_tag tag;
|
||||||
|
int error;
|
||||||
|
char *buf;
|
||||||
|
git_object *obj;
|
||||||
|
|
||||||
|
assert(oid && buffer);
|
||||||
|
|
||||||
|
memset(&tag, 0, sizeof(tag));
|
||||||
|
|
||||||
|
buf = strdup(buffer);
|
||||||
|
if(buf == NULL)
|
||||||
|
return GIT_ENOMEM;
|
||||||
|
|
||||||
|
if((error = parse_tag_buffer(&tag, buf, buf + strlen(buf))) < 0)
|
||||||
|
goto exit_freebuf;
|
||||||
|
|
||||||
|
error = git_object_lookup(&obj, repo, &tag.target, tag.type);
|
||||||
|
if(error < 0)
|
||||||
|
goto exit_freetag;
|
||||||
|
|
||||||
|
error = git_tag_create_o(oid, repo, tag.tag_name, obj,
|
||||||
|
tag.tagger, tag.message);
|
||||||
|
|
||||||
|
git_object_close(obj);
|
||||||
|
|
||||||
|
exit_freetag:
|
||||||
|
git_signature_free(tag.tagger);
|
||||||
|
free(tag.tag_name);
|
||||||
|
free(tag.message);
|
||||||
|
exit_freebuf:
|
||||||
|
free(buf);
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int git_tag__parse(git_tag *tag, git_odb_object *obj)
|
int git_tag__parse(git_tag *tag, git_odb_object *obj)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user