diff options
| author | Vicent Marti <tanoku@gmail.com> | 2011-04-02 12:28:35 +0300 |
|---|---|---|
| committer | Vicent Marti <tanoku@gmail.com> | 2011-04-02 12:28:35 +0300 |
| commit | d8ad64d3669182d368120a9b8db1147421498e22 (patch) | |
| tree | 07558263d7df5d10b64fe4d994e844f59b4fa554 /src | |
| parent | ccfce5f30fd1e906625594fad98e079b1cfe03d3 (diff) | |
| parent | 7b4a16e2c8869ba18264d0c44996880c8f9bb095 (diff) | |
| download | libgit2-d8ad64d3669182d368120a9b8db1147421498e22.tar.gz | |
Merge branch 'parse-tag-buffer' of https://github.com/carlosmn/libgit2 into development
Diffstat (limited to 'src')
| -rw-r--r-- | src/tag.c | 47 |
1 files changed, 46 insertions, 1 deletions
@@ -142,7 +142,7 @@ static int parse_tag_buffer(git_tag *tag, char *buffer, const char *buffer_end) tag->tagger = git__malloc(sizeof(git_signature)); if ((error = git_signature__parse(tag->tagger, &buffer, buffer_end, "tagger ")) != 0) - return error; + goto cleanup; text_len = buffer_end - ++buffer; @@ -151,6 +151,14 @@ static int parse_tag_buffer(git_tag *tag, char *buffer, const char *buffer_end) tag->message[text_len] = '\0'; return GIT_SUCCESS; + + cleanup: + if(tag->tag_name) + free(tag->tag_name); + if(tag->tagger) + git_signature_free(tag->tagger); + + return error; } int git_tag_create_o( @@ -233,6 +241,43 @@ int git_tag_create( 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) { |
