diff --git a/include/git2/diff.h b/include/git2/diff.h index 880292a1f..005b33965 100644 --- a/include/git2/diff.h +++ b/include/git2/diff.h @@ -1054,6 +1054,21 @@ GIT_EXTERN(int) git_diff_print( git_diff_line_cb print_cb, void *payload); +/** + * Produce the complete formatted text output from a diff into a + * buffer. + * + * @param out A pointer to a user-allocated git_buf that will + * contain the diff text + * @param diff A git_diff generated by one of the above functions. + * @param format A git_diff_format_t value to pick the text format. + * @return 0 on success or error code + */ +GIT_EXTERN(int) git_diff_to_buf( + git_buf *out, + git_diff *diff, + git_diff_format_t format); + /**@}*/ diff --git a/src/diff_print.c b/src/diff_print.c index 5bcb5d016..5a5a70b6f 100644 --- a/src/diff_print.c +++ b/src/diff_print.c @@ -714,6 +714,15 @@ int git_diff_print_callback__to_file_handle( return 0; } +/* print a git_diff to a git_buf */ +int git_diff_to_buf(git_buf *out, git_diff *diff, git_diff_format_t format) +{ + assert(out && diff); + git_buf_sanitize(out); + return git_diff_print( + diff, format, git_diff_print_callback__to_buf, out); +} + /* print a git_patch to an output callback */ int git_patch_print( git_patch *patch,