Merge branch 'mg/sequencer-commit-messages-always-verbatim'
authorJunio C Hamano <gitster@pobox.com>
Tue, 17 Mar 2015 23:01:31 +0000 (16:01 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 17 Mar 2015 23:01:32 +0000 (16:01 -0700)
"git cherry-pick" used to clean-up the log message even when it is
merely replaying an existing commit. It now replays the message
verbatim unless you are editing the message of resulting commits.

* mg/sequencer-commit-messages-always-verbatim:
sequencer: preserve commit messages

sequencer.c
t/t3511-cherry-pick-x.sh
index 32aa05ed828dfa3bac79edb83dd8a222560206d3..c4f4b7d571fa088f80a0dbba815491a35f0c153f 100644 (file)
@@ -373,6 +373,7 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts,
 {
        struct argv_array array;
        int rc;
+       const char *value;
 
        argv_array_init(&array);
        argv_array_push(&array, "commit");
@@ -385,6 +386,10 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts,
        if (!opts->edit) {
                argv_array_push(&array, "-F");
                argv_array_push(&array, defmsg);
+               if (!opts->signoff &&
+                   !opts->record_origin &&
+                   git_config_get_value("commit.cleanup", &value))
+                       argv_array_push(&array, "--cleanup=verbatim");
        }
 
        if (allow_empty)
index f97727975b880ae52394c6af11dde15b71ac6eb7..b7dff09d0656930332f347bd3106d1473015abd0 100755 (executable)
@@ -36,6 +36,20 @@ mesg_with_cherry_footer="$mesg_with_footer_sob
 (cherry picked from commit da39a3ee5e6b4b0d3255bfef95601890afd80709)
 Tested-by: C.U. Thor <cuthor@example.com>"
 
+mesg_unclean="$mesg_one_line
+
+
+leading empty lines
+
+
+consecutive empty lines
+
+# hash tag comment
+
+trailing empty lines
+
+
+"
 
 test_expect_success setup '
        git config advice.detachedhead false &&
@@ -53,6 +67,10 @@ test_expect_success setup '
        test_commit "$mesg_with_footer_sob" foo b mesg-with-footer-sob &&
        git reset --hard initial &&
        test_commit "$mesg_with_cherry_footer" foo b mesg-with-cherry-footer &&
+       git reset --hard initial &&
+       test_config commit.cleanup verbatim &&
+       test_commit "$mesg_unclean" foo b mesg-unclean &&
+       test_unconfig commit.cleanup &&
        pristine_detach initial &&
        test_commit conflicting unrelated
 '
@@ -216,4 +234,14 @@ test_expect_success 'cherry-pick -x -s treats "(cherry picked from..." line as p
        test_cmp expect actual
 '
 
+test_expect_success 'cherry-pick preserves commit message' '
+       pristine_detach initial &&
+       printf "$mesg_unclean" >expect &&
+       git log -1 --pretty=format:%B mesg-unclean >actual &&
+       test_cmp expect actual &&
+       git cherry-pick mesg-unclean &&
+       git log -1 --pretty=format:%B >actual &&
+       test_cmp expect actual
+'
+
 test_done