summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2017-10-13 13:12:10 +0200
committerPatrick Steinhardt <ps@pks.im>2018-06-22 09:50:07 +0200
commitaf5cd936faa688cde9b31d8858c32acac4d2adf5 (patch)
tree8d1c928637a7428229914cde81e344cb887bec87
parentab265a351044e724b6c9049f404e9de64c732130 (diff)
downloadlibgit2-af5cd936faa688cde9b31d8858c32acac4d2adf5.tar.gz
tag: implement function to parse raw data
Currently, parsing objects is strictly tied to having an ODB object available. This makes it hard to parse an object when all that is available is its raw object and size. Furthermore, hacking around that limitation by directly creating an ODB structure either on stack or on heap does not really work that well due to ODB objects being reference counted and then automatically free'd when reaching a reference count of zero. Implement a function `git_tag__parse_raw` to parse a tag object from a pair of `data` and `size`.
-rw-r--r--src/tag.c5
-rw-r--r--src/tag.h1
2 files changed, 6 insertions, 0 deletions
diff --git a/src/tag.c b/src/tag.c
index a7c55d0aa..663c7dabd 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -159,6 +159,11 @@ static int tag_parse(git_tag *tag, const char *buffer, const char *buffer_end)
return 0;
}
+int git_tag__parse_raw(void *_tag, const char *data, size_t size)
+{
+ return tag_parse(_tag, data, data + size);
+}
+
int git_tag__parse(void *_tag, git_odb_object *odb_obj)
{
git_tag *tag = _tag;
diff --git a/src/tag.h b/src/tag.h
index 8aae37840..734770abd 100644
--- a/src/tag.h
+++ b/src/tag.h
@@ -26,5 +26,6 @@ struct git_tag {
void git_tag__free(void *tag);
int git_tag__parse(void *tag, git_odb_object *obj);
+int git_tag__parse_raw(void *tag, const char *data, size_t size);
#endif