Test cccmd in t9001-send-email.sh and fix some bugs

For another patch series I'm working on I needed some tests
for the cc-cmd feature of git-send-email.

This patch adds 3 tests for the feature and for the possibility
to specify --suppress-cc multiple times, and fixes two bugs.
The first bug is that the --suppress-cc option for `cccmd' was
misspelled as `ccmd' in the code.  The second bug, which is
actually found only with my other series, is that the argument
to the cccmd is never quoted, so the cccmd would fail with
patch file names containing a space.

A third bug I fix (in the docs) is that the bodycc argument was
actually spelled ccbody in the documentation and bash completion.

Signed-off-by: Paolo Bonzini <bonzini@gnu.org>
Cc: Markus Heidelberg <markus.heidelberg@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Paolo Bonzini 2009-06-18 14:31:32 +02:00 committed by Junio C Hamano
parent 4f4fa9c228
commit cb8a9bd518
4 changed files with 80 additions and 10 deletions

View file

@ -193,12 +193,12 @@ Automating
- 'self' will avoid including the sender - 'self' will avoid including the sender
- 'cc' will avoid including anyone mentioned in Cc lines in the patch header - 'cc' will avoid including anyone mentioned in Cc lines in the patch header
except for self (use 'self' for that). except for self (use 'self' for that).
- 'ccbody' will avoid including anyone mentioned in Cc lines in the - 'bodycc' will avoid including anyone mentioned in Cc lines in the
patch body (commit message) except for self (use 'self' for that). patch body (commit message) except for self (use 'self' for that).
- 'sob' will avoid including anyone mentioned in Signed-off-by lines except - 'sob' will avoid including anyone mentioned in Signed-off-by lines except
for self (use 'self' for that). for self (use 'self' for that).
- 'cccmd' will avoid running the --cc-cmd. - 'cccmd' will avoid running the --cc-cmd.
- 'body' is equivalent to 'sob' + 'ccbody' - 'body' is equivalent to 'sob' + 'bodycc'
- 'all' will suppress all auto cc values. - 'all' will suppress all auto cc values.
-- --
+ +

View file

@ -1299,7 +1299,7 @@ _git_rebase ()
} }
__git_send_email_confirm_options="always never auto cc compose" __git_send_email_confirm_options="always never auto cc compose"
__git_send_email_suppresscc_options="author self cc ccbody sob cccmd body all" __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all"
_git_send_email () _git_send_email ()
{ {

View file

@ -334,7 +334,7 @@ sub read_config {
} }
if ($suppress_cc{'all'}) { if ($suppress_cc{'all'}) {
foreach my $entry (qw (ccmd cc author self sob body bodycc)) { foreach my $entry (qw (cccmd cc author self sob body bodycc)) {
$suppress_cc{$entry} = 1; $suppress_cc{$entry} = 1;
} }
delete $suppress_cc{'all'}; delete $suppress_cc{'all'};
@ -1104,7 +1104,7 @@ sub send_message
close F; close F;
if (defined $cc_cmd && !$suppress_cc{'cccmd'}) { if (defined $cc_cmd && !$suppress_cc{'cccmd'}) {
open(F, "$cc_cmd $t |") open(F, "$cc_cmd \Q$t\E |")
or die "(cc-cmd) Could not execute '$cc_cmd'"; or die "(cc-cmd) Could not execute '$cc_cmd'";
while(<F>) { while(<F>) {
my $c = $_; my $c = $_;

View file

@ -148,6 +148,22 @@ test_expect_success 'Prompting works' '
grep "^To: to@example.com$" msgtxt1 grep "^To: to@example.com$" msgtxt1
' '
test_expect_success 'cccmd works' '
clean_fake_sendmail &&
cp $patches cccmd.patch &&
echo cccmd--cccmd@example.com >>cccmd.patch &&
echo sed -n s/^cccmd--//p \"\$1\" > cccmd-sed &&
chmod +x cccmd-sed &&
git send-email \
--from="Example <nobody@example.com>" \
--to=nobody@example.com \
--cc-cmd=./cccmd-sed \
--smtp-server="$(pwd)/fake.sendmail" \
cccmd.patch \
&&
grep ^Cc:.*cccmd@example.com msgtxt1
'
z8=zzzzzzzz z8=zzzzzzzz
z64=$z8$z8$z8$z8$z8$z8$z8$z8 z64=$z8$z8$z8$z8$z8$z8$z8$z8
z512=$z64$z64$z64$z64$z64$z64$z64$z64 z512=$z64$z64$z64$z64$z64$z64$z64$z64
@ -274,7 +290,7 @@ EOF
test_suppression () { test_suppression () {
git send-email \ git send-email \
--dry-run \ --dry-run \
--suppress-cc=$1 \ --suppress-cc=$1 ${2+"--suppress-cc=$2"} \
--from="Example <from@example.com>" \ --from="Example <from@example.com>" \
--to=to@example.com \ --to=to@example.com \
--smtp-server relay.example.com \ --smtp-server relay.example.com \
@ -282,8 +298,8 @@ test_suppression () {
sed -e "s/^\(Date:\).*/\1 DATE-STRING/" \ sed -e "s/^\(Date:\).*/\1 DATE-STRING/" \
-e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \ -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
-e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \ -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
>actual-suppress-$1 && >actual-suppress-$1${2+"-$2"} &&
test_cmp expected-suppress-$1 actual-suppress-$1 test_cmp expected-suppress-$1${2+"-$2"} actual-suppress-$1${2+"-$2"}
} }
test_expect_success 'sendemail.cc set' ' test_expect_success 'sendemail.cc set' '
@ -316,6 +332,34 @@ test_expect_success 'sendemail.cc unset' '
test_suppression sob test_suppression sob
' '
cat >expected-suppress-cccmd <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>,<author@example.com>,<one@example.com>,<two@example.com>,<committer@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>, One <one@example.com>, two@example.com, C O Mitter <committer@example.com>
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
Result: OK
EOF
test_expect_success 'sendemail.cccmd' '
echo echo cc-cmd@example.com > cccmd &&
chmod +x cccmd &&
git config sendemail.cccmd ./cccmd &&
test_suppression cccmd
'
cat >expected-suppress-all <<\EOF cat >expected-suppress-all <<\EOF
0001-Second.patch 0001-Second.patch
Dry-OK. Log says: Dry-OK. Log says:
@ -341,6 +385,31 @@ cat >expected-suppress-body <<\EOF
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>' (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com' (mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com' (mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
(cc-cmd) Adding cc: cc-cmd@example.com from: './cccmd'
Dry-OK. Log says:
Server: relay.example.com
MAIL FROM:<from@example.com>
RCPT TO:<to@example.com>,<author@example.com>,<one@example.com>,<two@example.com>,<cc-cmd@example.com>
From: Example <from@example.com>
To: to@example.com
Cc: A <author@example.com>, One <one@example.com>, two@example.com, cc-cmd@example.com
Subject: [PATCH 1/1] Second.
Date: DATE-STRING
Message-Id: MESSAGE-ID-STRING
X-Mailer: X-MAILER-STRING
Result: OK
EOF
test_expect_success '--suppress-cc=body' '
test_suppression body
'
cat >expected-suppress-body-cccmd <<\EOF
0001-Second.patch
(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
Dry-OK. Log says: Dry-OK. Log says:
Server: relay.example.com Server: relay.example.com
MAIL FROM:<from@example.com> MAIL FROM:<from@example.com>
@ -356,8 +425,8 @@ X-Mailer: X-MAILER-STRING
Result: OK Result: OK
EOF EOF
test_expect_success '--suppress-cc=body' ' test_expect_success '--suppress-cc=body --suppress-cc=cccmd' '
test_suppression body test_suppression body cccmd
' '
cat >expected-suppress-sob <<\EOF cat >expected-suppress-sob <<\EOF
@ -381,6 +450,7 @@ Result: OK
EOF EOF
test_expect_success '--suppress-cc=sob' ' test_expect_success '--suppress-cc=sob' '
git config --unset sendemail.cccmd
test_suppression sob test_suppression sob
' '