summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2015-11-24 13:43:43 +0100
committerPatrick Steinhardt <ps@pks.im>2015-12-01 10:12:53 +0100
commit254e0a33ee66c65948e15efbe93a810c4077e324 (patch)
tree5d1729f99eb588a1caacd6cd764958643889bfd8
parent7f8fe1d45e086adc9e7f3f0c33b624eeb3774033 (diff)
downloadlibgit2-254e0a33ee66c65948e15efbe93a810c4077e324.tar.gz
diff: include commit message when formatting patch
When formatting a patch as email we do not include the commit's message in the formatted patch output. Implement this and add a test that verifies behavior.
-rw-r--r--include/git2/diff.h5
-rw-r--r--src/diff.c11
-rw-r--r--tests/diff/format_email.c41
-rw-r--r--tests/resources/diff_format_email/.gitted/indexbin256 -> 289 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/62/7e7e12d87e07a83fad5b6bfa25e86ead4a52701
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/73/09653445ecf038d3e3dd9ed55edb6cb541a4babin0 -> 28 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/objects/d5/ff67764c82f729b13c26a09576570d884d9687bin0 -> 121 bytes
-rw-r--r--tests/resources/diff_format_email/.gitted/refs/heads/master2
-rw-r--r--tests/resources/diff_format_email/file3.txt1
9 files changed, 58 insertions, 3 deletions
diff --git a/include/git2/diff.h b/include/git2/diff.h
index cbffdb49a..3eb265652 100644
--- a/include/git2/diff.h
+++ b/include/git2/diff.h
@@ -1286,12 +1286,15 @@ typedef struct {
/** Summary of the change */
const char *summary;
+ /** Commit message's body */
+ const char *body;
+
/** Author of the change */
const git_signature *author;
} git_diff_format_email_options;
#define GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION 1
-#define GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT {GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION, 0, 1, 1, NULL, NULL, NULL}
+#define GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT {GIT_DIFF_FORMAT_EMAIL_OPTIONS_VERSION, 0, 1, 1, NULL, NULL, NULL, NULL}
/**
* Create an e-mail ready patch from a diff.
diff --git a/src/diff.c b/src/diff.c
index 9402b6e61..67fab0763 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -1659,6 +1659,7 @@ int git_diff_format_email__append_header_tobuf(
const git_oid *id,
const git_signature *author,
const char *summary,
+ const char *body,
size_t patch_no,
size_t total_patches,
bool exclude_patchno_marker)
@@ -1698,6 +1699,13 @@ int git_diff_format_email__append_header_tobuf(
error = git_buf_printf(out, "%s\n\n", summary);
+ if (body) {
+ git_buf_puts(out, body);
+
+ if (out->ptr[out->size - 1] != '\n')
+ git_buf_putc(out, '\n');
+ }
+
return error;
}
@@ -1775,7 +1783,7 @@ int git_diff_format_email(
error = git_diff_format_email__append_header_tobuf(out,
opts->id, opts->author, summary == NULL ? opts->summary : summary,
- opts->patch_no, opts->total_patches, ignore_marker);
+ opts->body, opts->patch_no, opts->total_patches, ignore_marker);
if (error < 0)
goto on_error;
@@ -1818,6 +1826,7 @@ int git_diff_commit_as_email(
opts.total_patches = total_patches;
opts.id = git_commit_id(commit);
opts.summary = git_commit_summary(commit);
+ opts.body = git_commit_body(commit);
opts.author = git_commit_author(commit);
if ((error = git_diff__commit(&diff, repo, commit, diff_opts)) < 0)
diff --git a/tests/diff/format_email.c b/tests/diff/format_email.c
index 18ad99bd5..8a0128898 100644
--- a/tests/diff/format_email.c
+++ b/tests/diff/format_email.c
@@ -97,6 +97,47 @@ void test_diff_format_email__simple(void)
email, "9264b96c6d104d0e07ae33d3007b6a48246c6f92", &opts);
}
+void test_diff_format_email__with_message(void)
+{
+ git_diff_format_email_options opts = GIT_DIFF_FORMAT_EMAIL_OPTIONS_INIT;
+ const char *email = "From 627e7e12d87e07a83fad5b6bfa25e86ead4a5270 Mon Sep 17 00:00:00 2001\n" \
+ "From: Patrick Steinhardt <ps@pks.im>\n" \
+ "Date: Tue, 24 Nov 2015 13:34:39 +0100\n" \
+ "Subject: [PATCH] Modify content with message\n" \
+ "\n" \
+ "Modify content of file3.txt by appending a new line. Make this\n" \
+ "commit message somewhat longer to test behavior with newlines\n" \
+ "embedded in the message body.\n" \
+ "\n" \
+ "Also test if new paragraphs are included correctly.\n" \
+ "---\n" \
+ " file3.txt | 1 +\n" \
+ " 1 file changed, 1 insertion(+), 0 deletions(-)\n" \
+ "\n" \
+ "diff --git a/file3.txt b/file3.txt\n" \
+ "index 9a2d780..7309653 100644\n" \
+ "--- a/file3.txt\n" \
+ "+++ b/file3.txt\n" \
+ "@@ -3,3 +3,4 @@ file3!\n" \
+ " file3\n" \
+ " file3\n" \
+ " file3\n" \
+ "+file3\n" \
+ "--\n" \
+ "libgit2 0.23.0\n" \
+ "\n";
+
+ opts.body = "Modify content of file3.txt by appending a new line. Make this\n" \
+ "commit message somewhat longer to test behavior with newlines\n" \
+ "embedded in the message body.\n" \
+ "\n" \
+ "Also test if new paragraphs are included correctly.";
+
+ assert_email_match(
+ email, "627e7e12d87e07a83fad5b6bfa25e86ead4a5270", &opts);
+}
+
+
void test_diff_format_email__multiple(void)
{
git_oid oid;
diff --git a/tests/resources/diff_format_email/.gitted/index b/tests/resources/diff_format_email/.gitted/index
index f73027e56..d94f87de8 100644
--- a/tests/resources/diff_format_email/.gitted/index
+++ b/tests/resources/diff_format_email/.gitted/index
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/objects/62/7e7e12d87e07a83fad5b6bfa25e86ead4a5270 b/tests/resources/diff_format_email/.gitted/objects/62/7e7e12d87e07a83fad5b6bfa25e86ead4a5270
new file mode 100644
index 000000000..269a5bcf4
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/62/7e7e12d87e07a83fad5b6bfa25e86ead4a5270
@@ -0,0 +1 @@
+xMN0YGر] !8@%$Nqb5#{Jq+`ޛE!*RR8=5(MT b)⺗AQގE3` W3- cZLO{}O3 Bh.Px쇾gޏ$;f\Ntkzc⊼O{|L3Hx5&hN]G5oxY ܺRL޾7SnG15jl׎׵~1f.f_* wt6 T; \ No newline at end of file
diff --git a/tests/resources/diff_format_email/.gitted/objects/73/09653445ecf038d3e3dd9ed55edb6cb541a4ba b/tests/resources/diff_format_email/.gitted/objects/73/09653445ecf038d3e3dd9ed55edb6cb541a4ba
new file mode 100644
index 000000000..ba9c5fa57
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/73/09653445ecf038d3e3dd9ed55edb6cb541a4ba
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/objects/d5/ff67764c82f729b13c26a09576570d884d9687 b/tests/resources/diff_format_email/.gitted/objects/d5/ff67764c82f729b13c26a09576570d884d9687
new file mode 100644
index 000000000..e838eeb25
--- /dev/null
+++ b/tests/resources/diff_format_email/.gitted/objects/d5/ff67764c82f729b13c26a09576570d884d9687
Binary files differ
diff --git a/tests/resources/diff_format_email/.gitted/refs/heads/master b/tests/resources/diff_format_email/.gitted/refs/heads/master
index f0f3f932a..3bc734d47 100644
--- a/tests/resources/diff_format_email/.gitted/refs/heads/master
+++ b/tests/resources/diff_format_email/.gitted/refs/heads/master
@@ -1 +1 @@
-873806f6f27e631eb0b23e4b56bea2bfac14a373
+627e7e12d87e07a83fad5b6bfa25e86ead4a5270
diff --git a/tests/resources/diff_format_email/file3.txt b/tests/resources/diff_format_email/file3.txt
index 9a2d780ac..730965344 100644
--- a/tests/resources/diff_format_email/file3.txt
+++ b/tests/resources/diff_format_email/file3.txt
@@ -3,3 +3,4 @@ file3!
file3
file3
file3
+file3