[PATCH 2/5] t/t3511: demonstrate breakage in cherry-pick -s
- From
Brandon Casey <drafnel@gmail.com>
- Date
- Nov 15, 2012, 01:37 UTC
- Message-ID
- <1352943474-15573-2-git-send-email-drafnel@gmail.com>
- In-Reply-To
- <1352943474-15573-1-git-send-email-drafnel@gmail.com>
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@example.com>
(cherry picked from )
Signed-off-by: C O Mmitter <committer@example.com>not
Signed-off-by: A.U. Thor <author@example.com>
(cherry picked from da39a3ee5e6b4b0d3255bfef95601890afd80709)Signed-off-by: C O Mmitter <committer@example.com>
Signed-off-by: Brandon Casey <bcasey@nvidia.com> --- 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@example.com> +Signed-off-by: B.U. Thor <buthor@example.com>" + +rfc2822_cherry_mesg="$rfc2822_mesg +(cherry picked from commit da39a3ee5e6b4b0d3255bfef95601890afd80709) +Tested-by: C.U. Thor <cuthor@example.com>" + + +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