[PATCH v3 04/11] t/t3511: add some tests of 'cherry-pick -s' functionality

2013-01-27 Thread Brandon Casey
Add some tests to ensure that 'cherry-pick -s' operates in the following
manner:

   * Inserts a blank line before appending a s-o-b to a commit message that
 does not contain a s-o-b footer

   * Does not mistake first line subject: description as a s-o-b footer

   * Does not mistake single word message body as conforming to rfc2822

   * Appends a s-o-b when last s-o-b in footer does not match committer
 s-o-b, even when committer's s-o-b exists elsewhere in footer.

   * Does not append a s-o-b when last s-o-b matches committer s-o-b

   * Correctly detects a non-conforming footer containing a mix of s-o-b
 like elements and s-o-b elements. (marked expect failure)

Signed-off-by: Brandon Casey bca...@nvidia.com
---
 t/t3511-cherry-pick-x.sh | 111 +++
 1 file changed, 111 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 000..2a040b7
--- /dev/null
+++ b/t/t3511-cherry-pick-x.sh
@@ -0,0 +1,111 @@
+#!/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
+}
+
+mesg_one_line='base: commit message'
+
+mesg_no_footer=$mesg_one_line
+
+OneWordBodyThatsNotA-S-o-B
+
+mesg_with_footer=$mesg_no_footer
+
+Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+Signed-off-by: A.U. Thor aut...@example.com
+Signed-off-by: B.U. Thor but...@example.com
+
+mesg_broken_footer=$mesg_no_footer
+
+The signed-off-by string should begin with the words Signed-off-by followed
+by a colon and space, and then the signers name and email address. e.g.
+Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+
+mesg_with_footer_sob=$mesg_with_footer
+Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+
+
+test_expect_success setup '
+   git config advice.detachedhead false 
+   echo unrelated unrelated 
+   git add unrelated 
+   test_commit initial foo a 
+   test_commit $mesg_one_line foo b mesg-one-line 
+   git reset --hard initial 
+   test_commit $mesg_no_footer foo b mesg-no-footer 
+   git reset --hard initial 
+   test_commit $mesg_broken_footer foo b mesg-broken-footer 
+   git reset --hard initial 
+   test_commit $mesg_with_footer foo b mesg-with-footer 
+   git reset --hard initial 
+   test_commit $mesg_with_footer_sob foo b mesg-with-footer-sob 
+   pristine_detach initial 
+   test_commit conflicting unrelated
+'
+
+test_expect_success 'cherry-pick -s inserts blank line after one line subject' 
'
+   pristine_detach initial 
+   git cherry-pick -s mesg-one-line 
+   cat -EOF expect 
+   $mesg_one_line
+
+   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 inserts blank line after non-conforming 
footer' '
+   pristine_detach initial 
+   git cherry-pick -s mesg-broken-footer 
+   cat -EOF expect 
+   $mesg_broken_footer
+
+   Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+   EOF
+   git log -1 --pretty=format:%B actual 
+   test_cmp expect actual
+'
+
+test_expect_success 'cherry-pick -s inserts blank line when conforming footer 
not found' '
+   pristine_detach initial 
+   git cherry-pick -s mesg-no-footer 
+   cat -EOF expect 
+   $mesg_no_footer
+
+   Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+   EOF
+   git log -1 --pretty=format:%B actual 
+   test_cmp expect actual
+'
+
+test_expect_success 'cherry-pick -s adds sob when last sob doesnt match 
committer' '
+   pristine_detach initial 
+   git cherry-pick -s mesg-with-footer 
+   cat -EOF expect 
+   $mesg_with_footer
+   Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL
+   EOF
+   git log -1 --pretty=format:%B actual 
+   test_cmp expect actual
+'
+
+test_expect_success 'cherry-pick -s refrains from adding duplicate trailing 
sob' '
+   pristine_detach initial 
+   git cherry-pick -s mesg-with-footer-sob 
+   cat -EOF expect 
+   $mesg_with_footer_sob
+   EOF
+   git log -1 --pretty=format:%B actual 
+   test_cmp expect actual
+'
+
+test_done
-- 
1.8.1.1.450.g0327af3

--
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


Re: [PATCH v3 04/11] t/t3511: add some tests of 'cherry-pick -s' functionality

2013-01-27 Thread Jonathan Nieder
Brandon Casey wrote:

 --- /dev/null
 +++ b/t/t3511-cherry-pick-x.sh
 @@ -0,0 +1,111 @@
 +#!/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
 +}

Some day this should move to test-lib-functions.sh.  Not relevant
for this patch, though.

[...]
 +test_expect_failure 'cherry-pick -s inserts blank line after non-conforming 
 footer' '
 + pristine_detach initial 
 + git cherry-pick -s mesg-broken-footer 
 + cat -EOF expect 
 + $mesg_broken_footer
 +
 + Signed-off-by: $GIT_COMMITTER_NAME $GIT_COMMITTER_EMAIL

This bug is old.  When c1e01b0c (commit: More generous accepting of
RFC-2822 footer lines, 2009-10-28) added more precise parsing of the
RFC2822 footer when deciding whether to add a newline before a new
signoff, it forgot to change the sign-off already present case to
match.

Thanks for the test.  The rest of the tests in this file also look
good, of course.

Reviewed-by: Jonathan Nieder jrnie...@gmail.com
--
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