Commit 728274904f69fef48752d77c8cf75fc3aaf7808c

Edward Thomson 2016-04-25T12:40:19

Introduce `git_diff_to_buf` Like `git_patch_to_buf`, provide a simple helper method that can print an entire diff directory to a `git_buf`.

diff --git a/include/git2/diff.h b/include/git2/diff.h
index 880292a..005b339 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 5bcb5d0..5a5a70b 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,