diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/message.c | 25 | ||||
-rw-r--r-- | src/message.h | 3 | ||||
-rw-r--r-- | src/tag.c | 11 |
3 files changed, 27 insertions, 12 deletions
diff --git a/src/message.c b/src/message.c index aa0220fd0..a4aadb28f 100644 --- a/src/message.c +++ b/src/message.c @@ -6,7 +6,6 @@ */ #include "message.h" -#include <ctype.h> static size_t line_length_without_trailing_spaces(const char *line, size_t len) { @@ -22,7 +21,7 @@ static size_t line_length_without_trailing_spaces(const char *line, size_t len) /* Greatly inspired from git.git "stripspace" */ /* see https://github.com/git/git/blob/497215d8811ac7b8955693ceaad0899ecd894ed2/builtin/stripspace.c#L4-67 */ -int git_message_prettify(git_buf *message_out, const char *message, int strip_comments) +int git_message__prettify(git_buf *message_out, const char *message, int strip_comments) { const size_t message_len = strlen(message); @@ -59,3 +58,25 @@ int git_message_prettify(git_buf *message_out, const char *message, int strip_co return git_buf_oom(message_out) ? -1 : 0; } + +int git_message_prettify(char *message_out, size_t buffer_size, const char *message, int strip_comments) +{ + git_buf buf = GIT_BUF_INIT; + + if (strlen(message) + 1 > buffer_size) { /* We have to account for a potentially missing \n */ + giterr_set(GITERR_INVALID, "Buffer too short to hold the cleaned message"); + return -1; + } + + *message_out = '\0'; + + if (git_message__prettify(&buf, message, strip_comments) < 0) { + git_buf_free(&buf); + return -1; + } + + git_buf_copy_cstr(message_out, buffer_size, &buf); + git_buf_free(&buf); + + return 0; +} diff --git a/src/message.h b/src/message.h index ddfa13e18..7e4e7f337 100644 --- a/src/message.h +++ b/src/message.h @@ -7,8 +7,9 @@ #ifndef INCLUDE_message_h__ #define INCLUDE_message_h__ +#include "git2/message.h" #include "buffer.h" -int git_message_prettify(git_buf *message_out, const char *message, int strip_comments); +int git_message__prettify(git_buf *message_out, const char *message, int strip_comments); #endif /* INCLUDE_message_h__ */ @@ -196,7 +196,7 @@ static int write_tag_annotation( const git_signature *tagger, const char *message) { - git_buf tag = GIT_BUF_INIT, cleaned_message = GIT_BUF_INIT; + git_buf tag = GIT_BUF_INIT; git_odb *odb; git_oid__writebuf(&tag, "object ", git_object_id(target)); @@ -205,15 +205,9 @@ static int write_tag_annotation( git_signature__writebuf(&tag, "tagger ", tagger); git_buf_putc(&tag, '\n'); - /* Remove comments by default */ - if (git_message_prettify(&cleaned_message, message, 1) < 0) + if (git_buf_puts(&tag, message) < 0) goto on_error; - if (git_buf_puts(&tag, git_buf_cstr(&cleaned_message)) < 0) - goto on_error; - - git_buf_free(&cleaned_message); - if (git_repository_odb__weakptr(&odb, repo) < 0) goto on_error; @@ -225,7 +219,6 @@ static int write_tag_annotation( on_error: git_buf_free(&tag); - git_buf_free(&cleaned_message); giterr_set(GITERR_OBJECT, "Failed to create tag annotation."); return -1; } |