diff --git a/include/git2/patch.h b/include/git2/patch.h index e09f625c0..e5dd5d8d4 100644 --- a/include/git2/patch.h +++ b/include/git2/patch.h @@ -242,6 +242,16 @@ GIT_EXTERN(int) git_patch_to_str( char **string, git_patch *patch); +/** + * Get the content of a patch as a single diff text. + * + * @param out The git_buf to be filled in + * @param patch A git_patch representing changes to one file + * @return 0 on success, <0 on failure. + */ +GIT_EXTERN(int) git_patch_to_buf( + git_buf *out, + git_patch *patch); GIT_END_DECL diff --git a/src/diff_print.c b/src/diff_print.c index 7a70e2b18..0ab21d033 100644 --- a/src/diff_print.c +++ b/src/diff_print.c @@ -452,7 +452,15 @@ static int diff_print_to_buffer_cb( return git_buf_put(output, line->content, line->content_len); } -/* print a git_patch to a string buffer */ +/* print a git_patch to a git_buf */ +int git_patch_to_buf( + git_buf *out, + git_patch *patch) +{ + return git_patch_print(patch, diff_print_to_buffer_cb, out); +} + +/* print a git_patch to a char* */ int git_patch_to_str( char **string, git_patch *patch) @@ -460,7 +468,7 @@ int git_patch_to_str( int error; git_buf output = GIT_BUF_INIT; - if (!(error = git_patch_print(patch, diff_print_to_buffer_cb, &output))) + if (!(error = git_patch_to_buf(&output, patch))) *string = git_buf_detach(&output); else { git_buf_free(&output);