The cherry-pick -s functionality is currently broken in two ways. 1. handling of rfc2822 continuation lines has a bug, and the continuation lines are not handled correctly. 2. the "(cherry picked from ...)" lines are commonly appended to the end of the s-o-b footer and should be detected as part of the footer. They should not cause a new line to be inserted before the new s-o-b is added. i.e. we should produce this: Signed-off-by: A.U. Thor <author@xxxxxxxxxxx> (cherry picked from ) Signed-off-by: C O Mmitter <committer@xxxxxxxxxxx> not Signed-off-by: A.U. Thor <author@xxxxxxxxxxx> (cherry picked from da39a3ee5e6b4b0d3255bfef95601890afd80709) Signed-off-by: C O Mmitter <committer@xxxxxxxxxxx> Signed-off-by: Brandon Casey <bcasey@xxxxxxxxxx> --- t/t3511-cherry-pick-x.sh | 77 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 t/t3511-cherry-pick-x.sh diff --git a/t/t3511-cherry-pick-x.sh b/t/t3511-cherry-pick-x.sh new file mode 100755 index 0000000..b4e5c65 --- /dev/null +++ b/t/t3511-cherry-pick-x.sh @@ -0,0 +1,77 @@ +#!/bin/sh + +test_description='Test cherry-pick -x and -s' + +. ./test-lib.sh + +pristine_detach () { + git cherry-pick --quit && + git checkout -f "$1^0" && + git read-tree -u --reset HEAD && + git clean -d -f -f -q -x +} + +non_rfc2822_mesg='base with footer + +Commit message body is here.' + +rfc2822_mesg="$non_rfc2822_mesg + +Signed-off-by: A.U. Thor + <author@xxxxxxxxxxx> +Signed-off-by: B.U. Thor <buthor@xxxxxxxxxxx>" + +rfc2822_cherry_mesg="$rfc2822_mesg +(cherry picked from commit da39a3ee5e6b4b0d3255bfef95601890afd80709) +Tested-by: C.U. Thor <cuthor@xxxxxxxxxxx>" + + +test_expect_success setup ' + git config advice.detachedhead false && + echo unrelated >unrelated && + git add unrelated && + test_commit initial foo a && + test_commit "$non_rfc2822_mesg" foo b non-rfc2822-base && + git reset --hard initial && + test_commit "$rfc2822_mesg" foo b rfc2822-base && + git reset --hard initial && + test_commit "$rfc2822_cherry_mesg" foo b rfc2822-cherry-base && + pristine_detach initial && + test_commit conflicting unrelated +' + +test_expect_success 'cherry-pick -s inserts blank line after non-rfc2822 footer' ' + pristine_detach initial && + git cherry-pick -s non-rfc2822-base && + cat <<-EOF >expect && + $non_rfc2822_mesg + + Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> + EOF + git log -1 --pretty=format:%B >actual && + test_cmp expect actual +' + +test_expect_failure 'cherry-pick -s not confused by rfc2822 continuation line' ' + pristine_detach initial && + git cherry-pick -s rfc2822-base && + cat <<-EOF >expect && + $rfc2822_mesg + Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> + EOF + git log -1 --pretty=format:%B >actual && + test_cmp expect actual +' + +test_expect_failure 'cherry-pick treats -s "(cherry picked from..." line as part of footer' ' + pristine_detach initial && + git cherry-pick -s rfc2822-cherry-base && + cat <<-EOF >expect && + $rfc2822_cherry_mesg + Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> + EOF + git log -1 --pretty=format:%B >actual && + test_cmp expect actual +' + +test_done -- 1.8.0 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html