Before this, git cherry-pick -x resulted in messages like this:

    Message of cherry-picked commit
    (cherry picked from commit 871e293c9acbeaacce59dcd98fab6028f552f5be)

Which is not the recommended way to write commit messages. When the
commit message ends with a Signed-off-by, it's less bad. But having it
on a line apart from the others also doesn't hurt there.

Now, care is taken that the line is appended as a separate paragraph:

    Message of cherry-picked commit

    (cherry picked from commit 871e293c9acbeaacce59dcd98fab6028f552f5be)

Because some Git implementations (JGit) don't always terminate the
commit message with a newline, this change also inserts a second newline
if necessary.

Signed-off-by: Robin Stocker <ro...@nibor.org>
---
 sequencer.c                    |    4 ++++
 t/t3511-cherry-pick-message.sh |   26 ++++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 0 deletions(-)
 create mode 100755 t/t3511-cherry-pick-message.sh

diff --git a/sequencer.c b/sequencer.c
index bf078f2..41852e6 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -484,6 +484,10 @@ static int do_pick_commit(struct commit *commit, struct 
replay_opts *opts)
                }
 
                if (opts->record_origin) {
+                       /* Some implementations don't terminate message with 
final \n, so add it */
+                       if (msg.message[strlen(msg.message)-1] != '\n')
+                               strbuf_addch(&msgbuf, '\n');
+                       strbuf_addch(&msgbuf, '\n');
                        strbuf_addstr(&msgbuf, "(cherry picked from commit ");
                        strbuf_addstr(&msgbuf, 
sha1_to_hex(commit->object.sha1));
                        strbuf_addstr(&msgbuf, ")\n");
diff --git a/t/t3511-cherry-pick-message.sh b/t/t3511-cherry-pick-message.sh
new file mode 100755
index 0000000..6aba8b2
--- /dev/null
+++ b/t/t3511-cherry-pick-message.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+test_description='Test cherry-pick commit message with -x'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+       git config advice.detachedhead false &&
+       test_commit initial foo a &&
+       test_commit base foo b &&
+       git checkout initial
+'
+
+test_expect_success 'cherry-pick -x appends message on separate line' '
+       git cherry-pick -x base &&
+       cat >expect <<-\EOF &&
+       base
+
+       (cherry picked from commit 462a97d89aa55720c97984a3ce09665989193981)
+
+       EOF
+       git log --format=%B -n 1 >actual &&
+       test_cmp expect actual
+'
+
+test_done
-- 
1.7.7.6
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to