3 test_description='git send-email'
 
   6 # May be altered later in the test
 
   9 replace_variable_fields () {
 
  10         sed     -e "s/^\(Date:\).*/\1 DATE-STRING/" \
 
  11                 -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
 
  12                 -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/"
 
  15 test_expect_success $PREREQ 'prepare reference tree' '
 
  16         echo "1A quick brown fox jumps over the" >file &&
 
  17         echo "lazy dog" >>file &&
 
  19         GIT_AUTHOR_NAME="A" git commit -a -m "Initial."
 
  22 test_expect_success $PREREQ 'Setup helper tool' '
 
  23         write_script fake.sendmail <<-\EOF &&
 
  26         while test -f commandline$output
 
  33         done >commandline$output
 
  36         git add fake.sendmail &&
 
  37         GIT_AUTHOR_NAME="A" git commit -a -m "Second."
 
  40 clean_fake_sendmail () {
 
  41         rm -f commandline* msgtxt*
 
  44 test_expect_success $PREREQ 'Extract patches' '
 
  45         patches=$(git format-patch -s --cc="One <one@example.com>" --cc=two@example.com -n HEAD^1)
 
  48 # Test no confirm early to ensure remaining tests will not hang
 
  52                 GIT_SEND_EMAIL_NOTTY=1 \
 
  54                 --from="Example <from@example.com>" \
 
  55                 --to=nobody@example.com \
 
  56                 --smtp-server="$(pwd)/fake.sendmail" \
 
  59                 ! grep "Send this email" stdout &&
 
  63 # Exit immediately to prevent hang if a no-confirm test fails
 
  65         if ! test -f no_confirm_okay
 
  67                 say 'confirm test failed; skipping remaining tests to prevent hanging'
 
  68                 PREREQ="$PREREQ,CHECK_NO_CONFIRM"
 
  73 test_expect_success $PREREQ 'No confirm with --suppress-cc' '
 
  74         test_no_confirm --suppress-cc=sob &&
 
  79 test_expect_success $PREREQ 'No confirm with --confirm=never' '
 
  80         test_no_confirm --confirm=never &&
 
  84 # leave sendemail.confirm set to never after this so that none of the
 
  85 # remaining tests prompt unintentionally.
 
  86 test_expect_success $PREREQ 'No confirm with sendemail.confirm=never' '
 
  87         git config sendemail.confirm never &&
 
  88         test_no_confirm --compose --subject=foo &&
 
  92 test_expect_success $PREREQ 'Send patches' '
 
  93         git send-email --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
 
  96 test_expect_success $PREREQ 'setup expect' '
 
 105 test_expect_success $PREREQ 'Verify commandline' '
 
 106         test_cmp expected commandline1
 
 109 test_expect_success $PREREQ 'Send patches with --envelope-sender' '
 
 110         clean_fake_sendmail &&
 
 111         git send-email --envelope-sender="Patch Contributor <patch@example.com>" --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
 
 114 test_expect_success $PREREQ 'setup expect' '
 
 115         cat >expected <<-\EOF
 
 125 test_expect_success $PREREQ 'Verify commandline' '
 
 126         test_cmp expected commandline1
 
 129 test_expect_success $PREREQ 'Send patches with --envelope-sender=auto' '
 
 130         clean_fake_sendmail &&
 
 131         git send-email --envelope-sender=auto --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
 
 134 test_expect_success $PREREQ 'setup expect' '
 
 135         cat >expected <<-\EOF
 
 145 test_expect_success $PREREQ 'Verify commandline' '
 
 146         test_cmp expected commandline1
 
 149 test_expect_success $PREREQ 'setup expect for cc trailer' "
 
 150 cat >expected-cc <<\EOF
 
 151 !recipient@example.com!
 
 162 test_expect_success $PREREQ 'cc trailer with various syntax' '
 
 163         test_commit cc-trailer &&
 
 164         test_when_finished "git reset --hard HEAD^" &&
 
 165         git commit --amend -F - <<-EOF &&
 
 169         Cc: <two@example.com> # trailing comments are ignored
 
 170         Cc: <three@example.com>, <not.four@example.com> one address per line
 
 171         Cc: "Some # Body" <four@example.com> [ <also.a.comment> ]
 
 172         Cc: five@example.com # not.six@example.com
 
 173         Cc: six@example.com, not.seven@example.com
 
 175         clean_fake_sendmail &&
 
 176         git send-email -1 --to=recipient@example.com \
 
 177                 --smtp-server="$(pwd)/fake.sendmail" &&
 
 178         test_cmp expected-cc commandline1
 
 181 test_expect_success $PREREQ 'setup fake get_maintainer.pl script for cc trailer' "
 
 182         write_script expected-cc-script.sh <<-EOF
 
 183         echo 'One Person <one@example.com> (supporter:THIS (FOO/bar))'
 
 184         echo 'Two Person <two@example.com> (maintainer:THIS THING)'
 
 185         echo 'Third List <three@example.com> (moderated list:THIS THING (FOO/bar))'
 
 186         echo '<four@example.com> (moderated list:FOR THING)'
 
 187         echo 'five@example.com (open list:FOR THING (FOO/bar))'
 
 188         echo 'six@example.com (open list)'
 
 192 test_expect_success $PREREQ 'cc trailer with get_maintainer.pl output' '
 
 193         clean_fake_sendmail &&
 
 194         git send-email -1 --to=recipient@example.com \
 
 195                 --cc-cmd=./expected-cc-script.sh \
 
 196                 --smtp-server="$(pwd)/fake.sendmail" &&
 
 197         test_cmp expected-cc commandline1
 
 200 test_expect_success $PREREQ 'setup expect' "
 
 201 cat >expected-show-all-headers <<\EOF
 
 203 (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 
 204 (mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 
 205 (mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 
 207 Server: relay.example.com
 
 208 MAIL FROM:<from@example.com>
 
 209 RCPT TO:<to@example.com>
 
 210 RCPT TO:<cc@example.com>
 
 211 RCPT TO:<author@example.com>
 
 212 RCPT TO:<one@example.com>
 
 213 RCPT TO:<two@example.com>
 
 214 RCPT TO:<bcc@example.com>
 
 215 From: Example <from@example.com>
 
 218         A <author@example.com>,
 
 219         One <one@example.com>,
 
 221 Subject: [PATCH 1/1] Second.
 
 223 Message-Id: MESSAGE-ID-STRING
 
 224 X-Mailer: X-MAILER-STRING
 
 225 In-Reply-To: <unique-message-id@example.com>
 
 226 References: <unique-message-id@example.com>
 
 227 Reply-To: Reply <reply@example.com>
 
 229 Content-Transfer-Encoding: 8bit
 
 235 test_suppress_self () {
 
 237         test_when_finished "git reset --hard HEAD^" &&
 
 239         write_script cccmd-sed <<-EOF &&
 
 240                 sed -n -e s/^cccmd--//p "\$1"
 
 243         git commit --amend --author="$1 <$2>" -F - &&
 
 244         clean_fake_sendmail &&
 
 245         git format-patch --stdout -1 >"suppress-self-$3.patch" &&
 
 247         git send-email --from="$1 <$2>" \
 
 248                 --to=nobody@example.com \
 
 249                 --cc-cmd=./cccmd-sed \
 
 251                 --smtp-server="$(pwd)/fake.sendmail" \
 
 252                 suppress-self-$3.patch &&
 
 254         mv msgtxt1 msgtxt1-$3 &&
 
 255         sed -e '/^$/q' msgtxt1-$3 >"msghdr1-$3" &&
 
 257         (grep '^Cc:' msghdr1-$3 >"actual-no-cc-$3";
 
 258          test_must_be_empty actual-no-cc-$3)
 
 261 test_suppress_self_unquoted () {
 
 262         test_suppress_self "$1" "$2" "unquoted-$3" <<-EOF
 
 263                 test suppress-cc.self unquoted-$3 with name $1 email $2
 
 270                 Signed-off-by: $1 <$2>
 
 274 test_suppress_self_quoted () {
 
 275         test_suppress_self "$1" "$2" "quoted-$3" <<-EOF
 
 276                 test suppress-cc.self quoted-$3 with name $1 email $2
 
 284                 Signed-off-by: $1 <$2>
 
 285                 Signed-off-by: "$1" <$2>
 
 289 test_expect_success $PREREQ 'self name is suppressed' "
 
 290         test_suppress_self_unquoted 'A U Thor' 'author@example.com' \
 
 291                 'self_name_suppressed'
 
 294 test_expect_success $PREREQ 'self name with dot is suppressed' "
 
 295         test_suppress_self_quoted 'A U. Thor' 'author@example.com' \
 
 296                 'self_name_dot_suppressed'
 
 299 test_expect_success $PREREQ 'non-ascii self name is suppressed' "
 
 300         test_suppress_self_quoted 'Füñný Nâmé' 'odd_?=mail@example.com' \
 
 301                 'non_ascii_self_suppressed'
 
 304 # This name is long enough to force format-patch to split it into multiple
 
 305 # encoded-words, assuming it uses UTF-8 with the "Q" encoding.
 
 306 test_expect_success $PREREQ 'long non-ascii self name is suppressed' "
 
 307         test_suppress_self_quoted 'Ƒüñníęř €. Nâṁé' 'odd_?=mail@example.com' \
 
 308                 'long_non_ascii_self_suppressed'
 
 311 test_expect_success $PREREQ 'sanitized self name is suppressed' "
 
 312         test_suppress_self_unquoted '\"A U. Thor\"' 'author@example.com' \
 
 313                 'self_name_sanitized_suppressed'
 
 316 test_expect_success $PREREQ 'Show all headers' '
 
 320                 --from="Example <from@example.com>" \
 
 321                 --reply-to="Reply <reply@example.com>" \
 
 322                 --to=to@example.com \
 
 323                 --cc=cc@example.com \
 
 324                 --bcc=bcc@example.com \
 
 325                 --in-reply-to="<unique-message-id@example.com>" \
 
 326                 --smtp-server relay.example.com \
 
 327                 $patches | replace_variable_fields \
 
 328                 >actual-show-all-headers &&
 
 329         test_cmp expected-show-all-headers actual-show-all-headers
 
 332 test_expect_success $PREREQ 'Prompting works' '
 
 333         clean_fake_sendmail &&
 
 334         (echo "to@example.com" &&
 
 336         ) | GIT_SEND_EMAIL_NOTTY=1 git send-email \
 
 337                 --smtp-server="$(pwd)/fake.sendmail" \
 
 340                 grep "^From: A U Thor <author@example.com>\$" msgtxt1 &&
 
 341                 grep "^To: to@example.com\$" msgtxt1
 
 344 test_expect_success $PREREQ,AUTOIDENT 'implicit ident is allowed' '
 
 345         clean_fake_sendmail &&
 
 346         (sane_unset GIT_AUTHOR_NAME &&
 
 347         sane_unset GIT_AUTHOR_EMAIL &&
 
 348         sane_unset GIT_COMMITTER_NAME &&
 
 349         sane_unset GIT_COMMITTER_EMAIL &&
 
 350         GIT_SEND_EMAIL_NOTTY=1 git send-email \
 
 351                 --smtp-server="$(pwd)/fake.sendmail" \
 
 352                 --to=to@example.com \
 
 353                 $patches </dev/null 2>errors
 
 357 test_expect_success $PREREQ,!AUTOIDENT 'broken implicit ident aborts send-email' '
 
 358         clean_fake_sendmail &&
 
 359         (sane_unset GIT_AUTHOR_NAME &&
 
 360         sane_unset GIT_AUTHOR_EMAIL &&
 
 361         sane_unset GIT_COMMITTER_NAME &&
 
 362         sane_unset GIT_COMMITTER_EMAIL &&
 
 363         GIT_SEND_EMAIL_NOTTY=1 && export GIT_SEND_EMAIL_NOTTY &&
 
 364         test_must_fail git send-email \
 
 365                 --smtp-server="$(pwd)/fake.sendmail" \
 
 366                 --to=to@example.com \
 
 367                 $patches </dev/null 2>errors &&
 
 368         test_i18ngrep "tell me who you are" errors
 
 372 test_expect_success $PREREQ 'setup tocmd and cccmd scripts' '
 
 373         write_script tocmd-sed <<-\EOF &&
 
 374         sed -n -e "s/^tocmd--//p" "$1"
 
 376         write_script cccmd-sed <<-\EOF
 
 377         sed -n -e "s/^cccmd--//p" "$1"
 
 381 test_expect_success $PREREQ 'tocmd works' '
 
 382         clean_fake_sendmail &&
 
 383         cp $patches tocmd.patch &&
 
 384         echo tocmd--tocmd@example.com >>tocmd.patch &&
 
 386                 --from="Example <nobody@example.com>" \
 
 387                 --to-cmd=./tocmd-sed \
 
 388                 --smtp-server="$(pwd)/fake.sendmail" \
 
 391         grep "^To: tocmd@example.com" msgtxt1
 
 394 test_expect_success $PREREQ 'cccmd works' '
 
 395         clean_fake_sendmail &&
 
 396         cp $patches cccmd.patch &&
 
 397         echo "cccmd--  cccmd@example.com" >>cccmd.patch &&
 
 399                 --from="Example <nobody@example.com>" \
 
 400                 --to=nobody@example.com \
 
 401                 --cc-cmd=./cccmd-sed \
 
 402                 --smtp-server="$(pwd)/fake.sendmail" \
 
 405         grep "^ cccmd@example.com" msgtxt1
 
 408 test_expect_success $PREREQ 'reject long lines' '
 
 410         z64=$z8$z8$z8$z8$z8$z8$z8$z8 &&
 
 411         z512=$z64$z64$z64$z64$z64$z64$z64$z64 &&
 
 412         clean_fake_sendmail &&
 
 413         cp $patches longline.patch &&
 
 414         echo $z512$z512 >>longline.patch &&
 
 415         test_must_fail git send-email \
 
 416                 --from="Example <nobody@example.com>" \
 
 417                 --to=nobody@example.com \
 
 418                 --smtp-server="$(pwd)/fake.sendmail" \
 
 419                 --transfer-encoding=8bit \
 
 420                 $patches longline.patch \
 
 422         grep longline.patch errors
 
 425 test_expect_success $PREREQ 'no patch was sent' '
 
 426         ! test -e commandline1
 
 429 test_expect_success $PREREQ 'Author From: in message body' '
 
 430         clean_fake_sendmail &&
 
 432                 --from="Example <nobody@example.com>" \
 
 433                 --to=nobody@example.com \
 
 434                 --smtp-server="$(pwd)/fake.sendmail" \
 
 436         sed "1,/^\$/d" <msgtxt1 >msgbody1 &&
 
 437         grep "From: A <author@example.com>" msgbody1
 
 440 test_expect_success $PREREQ 'Author From: not in message body' '
 
 441         clean_fake_sendmail &&
 
 443                 --from="A <author@example.com>" \
 
 444                 --to=nobody@example.com \
 
 445                 --smtp-server="$(pwd)/fake.sendmail" \
 
 447         sed "1,/^\$/d" <msgtxt1 >msgbody1 &&
 
 448         ! grep "From: A <author@example.com>" msgbody1
 
 451 test_expect_success $PREREQ 'allow long lines with --no-validate' '
 
 453                 --from="Example <nobody@example.com>" \
 
 454                 --to=nobody@example.com \
 
 455                 --smtp-server="$(pwd)/fake.sendmail" \
 
 457                 $patches longline.patch \
 
 461 test_expect_success $PREREQ 'short lines with auto encoding are 8bit' '
 
 462         clean_fake_sendmail &&
 
 464                 --from="A <author@example.com>" \
 
 465                 --to=nobody@example.com \
 
 466                 --smtp-server="$(pwd)/fake.sendmail" \
 
 467                 --transfer-encoding=auto \
 
 469         grep "Content-Transfer-Encoding: 8bit" msgtxt1
 
 472 test_expect_success $PREREQ 'long lines with auto encoding are quoted-printable' '
 
 473         clean_fake_sendmail &&
 
 475                 --from="Example <nobody@example.com>" \
 
 476                 --to=nobody@example.com \
 
 477                 --smtp-server="$(pwd)/fake.sendmail" \
 
 478                 --transfer-encoding=auto \
 
 481         grep "Content-Transfer-Encoding: quoted-printable" msgtxt1
 
 484 test_expect_success $PREREQ 'carriage returns with auto encoding are quoted-printable' '
 
 485         clean_fake_sendmail &&
 
 486         cp $patches cr.patch &&
 
 487         printf "this is a line\r\n" >>cr.patch &&
 
 489                 --from="Example <nobody@example.com>" \
 
 490                 --to=nobody@example.com \
 
 491                 --smtp-server="$(pwd)/fake.sendmail" \
 
 492                 --transfer-encoding=auto \
 
 495         grep "Content-Transfer-Encoding: quoted-printable" msgtxt1
 
 498 for enc in auto quoted-printable base64
 
 500         test_expect_success $PREREQ "--validate passes with encoding $enc" '
 
 502                         --from="Example <nobody@example.com>" \
 
 503                         --to=nobody@example.com \
 
 504                         --smtp-server="$(pwd)/fake.sendmail" \
 
 505                         --transfer-encoding=$enc \
 
 507                         $patches longline.patch
 
 512 for enc in 7bit 8bit quoted-printable base64
 
 514         test_expect_success $PREREQ "--transfer-encoding=$enc produces correct header" '
 
 515                 clean_fake_sendmail &&
 
 517                         --from="Example <nobody@example.com>" \
 
 518                         --to=nobody@example.com \
 
 519                         --smtp-server="$(pwd)/fake.sendmail" \
 
 520                         --transfer-encoding=$enc \
 
 522                 grep "Content-Transfer-Encoding: $enc" msgtxt1
 
 526 test_expect_success $PREREQ 'Invalid In-Reply-To' '
 
 527         clean_fake_sendmail &&
 
 529                 --from="Example <nobody@example.com>" \
 
 530                 --to=nobody@example.com \
 
 532                 --smtp-server="$(pwd)/fake.sendmail" \
 
 535         ! grep "^In-Reply-To: < *>" msgtxt1
 
 538 test_expect_success $PREREQ 'Valid In-Reply-To when prompting' '
 
 539         clean_fake_sendmail &&
 
 540         (echo "From Example <from@example.com>" &&
 
 541          echo "To Example <to@example.com>" &&
 
 543         ) | GIT_SEND_EMAIL_NOTTY=1 git send-email \
 
 544                 --smtp-server="$(pwd)/fake.sendmail" \
 
 546         ! grep "^In-Reply-To: < *>" msgtxt1
 
 549 test_expect_success $PREREQ 'In-Reply-To without --chain-reply-to' '
 
 550         clean_fake_sendmail &&
 
 551         echo "<unique-message-id@example.com>" >expect &&
 
 553                 --from="Example <nobody@example.com>" \
 
 554                 --to=nobody@example.com \
 
 555                 --no-chain-reply-to \
 
 556                 --in-reply-to="$(cat expect)" \
 
 557                 --smtp-server="$(pwd)/fake.sendmail" \
 
 558                 $patches $patches $patches \
 
 560         # The first message is a reply to --in-reply-to
 
 561         sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt1 >actual &&
 
 562         test_cmp expect actual &&
 
 563         # Second and subsequent messages are replies to the first one
 
 564         sed -n -e "s/^Message-Id: *\(.*\)/\1/p" msgtxt1 >expect &&
 
 565         sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt2 >actual &&
 
 566         test_cmp expect actual &&
 
 567         sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt3 >actual &&
 
 568         test_cmp expect actual
 
 571 test_expect_success $PREREQ 'In-Reply-To with --chain-reply-to' '
 
 572         clean_fake_sendmail &&
 
 573         echo "<unique-message-id@example.com>" >expect &&
 
 575                 --from="Example <nobody@example.com>" \
 
 576                 --to=nobody@example.com \
 
 578                 --in-reply-to="$(cat expect)" \
 
 579                 --smtp-server="$(pwd)/fake.sendmail" \
 
 580                 $patches $patches $patches \
 
 582         sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt1 >actual &&
 
 583         test_cmp expect actual &&
 
 584         sed -n -e "s/^Message-Id: *\(.*\)/\1/p" msgtxt1 >expect &&
 
 585         sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt2 >actual &&
 
 586         test_cmp expect actual &&
 
 587         sed -n -e "s/^Message-Id: *\(.*\)/\1/p" msgtxt2 >expect &&
 
 588         sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt3 >actual &&
 
 589         test_cmp expect actual
 
 592 test_expect_success $PREREQ 'setup fake editor' '
 
 593         write_script fake-editor <<-\EOF
 
 594         echo fake edit >>"$1"
 
 598 test_set_editor "$(pwd)/fake-editor"
 
 600 test_expect_success $PREREQ '--compose works' '
 
 601         clean_fake_sendmail &&
 
 603         --compose --subject foo \
 
 604         --from="Example <nobody@example.com>" \
 
 605         --to=nobody@example.com \
 
 606         --smtp-server="$(pwd)/fake.sendmail" \
 
 611 test_expect_success $PREREQ 'first message is compose text' '
 
 612         grep "^fake edit" msgtxt1
 
 615 test_expect_success $PREREQ 'second message is patch' '
 
 616         grep "Subject:.*Second" msgtxt2
 
 619 test_expect_success $PREREQ 'setup expect' "
 
 620 cat >expected-suppress-sob <<\EOF
 
 622 (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 
 623 (mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 
 624 (mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 
 626 Server: relay.example.com
 
 627 MAIL FROM:<from@example.com>
 
 628 RCPT TO:<to@example.com>
 
 629 RCPT TO:<cc@example.com>
 
 630 RCPT TO:<author@example.com>
 
 631 RCPT TO:<one@example.com>
 
 632 RCPT TO:<two@example.com>
 
 633 From: Example <from@example.com>
 
 636         A <author@example.com>,
 
 637         One <one@example.com>,
 
 639 Subject: [PATCH 1/1] Second.
 
 641 Message-Id: MESSAGE-ID-STRING
 
 642 X-Mailer: X-MAILER-STRING
 
 644 Content-Transfer-Encoding: 8bit
 
 650 test_suppression () {
 
 653                 --suppress-cc=$1 ${2+"--suppress-cc=$2"} \
 
 654                 --from="Example <from@example.com>" \
 
 655                 --to=to@example.com \
 
 656                 --smtp-server relay.example.com \
 
 657                 $patches | replace_variable_fields \
 
 658                 >actual-suppress-$1${2+"-$2"} &&
 
 659         test_cmp expected-suppress-$1${2+"-$2"} actual-suppress-$1${2+"-$2"}
 
 662 test_expect_success $PREREQ 'sendemail.cc set' '
 
 663         git config sendemail.cc cc@example.com &&
 
 667 test_expect_success $PREREQ 'setup expect' "
 
 668 cat >expected-suppress-sob <<\EOF
 
 670 (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 
 671 (mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 
 672 (mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 
 674 Server: relay.example.com
 
 675 MAIL FROM:<from@example.com>
 
 676 RCPT TO:<to@example.com>
 
 677 RCPT TO:<author@example.com>
 
 678 RCPT TO:<one@example.com>
 
 679 RCPT TO:<two@example.com>
 
 680 From: Example <from@example.com>
 
 682 Cc: A <author@example.com>,
 
 683         One <one@example.com>,
 
 685 Subject: [PATCH 1/1] Second.
 
 687 Message-Id: MESSAGE-ID-STRING
 
 688 X-Mailer: X-MAILER-STRING
 
 690 Content-Transfer-Encoding: 8bit
 
 696 test_expect_success $PREREQ 'sendemail.cc unset' '
 
 697         git config --unset sendemail.cc &&
 
 701 test_expect_success $PREREQ 'setup expect' "
 
 702 cat >expected-suppress-cccmd <<\EOF
 
 704 (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 
 705 (mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 
 706 (mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 
 707 (body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
 
 709 Server: relay.example.com
 
 710 MAIL FROM:<from@example.com>
 
 711 RCPT TO:<to@example.com>
 
 712 RCPT TO:<author@example.com>
 
 713 RCPT TO:<one@example.com>
 
 714 RCPT TO:<two@example.com>
 
 715 RCPT TO:<committer@example.com>
 
 716 From: Example <from@example.com>
 
 718 Cc: A <author@example.com>,
 
 719         One <one@example.com>,
 
 721         C O Mitter <committer@example.com>
 
 722 Subject: [PATCH 1/1] Second.
 
 724 Message-Id: MESSAGE-ID-STRING
 
 725 X-Mailer: X-MAILER-STRING
 
 727 Content-Transfer-Encoding: 8bit
 
 733 test_expect_success $PREREQ 'sendemail.cccmd' '
 
 734         write_script cccmd <<-\EOF &&
 
 735         echo cc-cmd@example.com
 
 737         git config sendemail.cccmd ./cccmd &&
 
 738         test_suppression cccmd
 
 741 test_expect_success $PREREQ 'setup expect' '
 
 742 cat >expected-suppress-all <<\EOF
 
 745 Server: relay.example.com
 
 746 MAIL FROM:<from@example.com>
 
 747 RCPT TO:<to@example.com>
 
 748 From: Example <from@example.com>
 
 750 Subject: [PATCH 1/1] Second.
 
 752 Message-Id: MESSAGE-ID-STRING
 
 753 X-Mailer: X-MAILER-STRING
 
 755 Content-Transfer-Encoding: 8bit
 
 761 test_expect_success $PREREQ '--suppress-cc=all' '
 
 765 test_expect_success $PREREQ 'setup expect' "
 
 766 cat >expected-suppress-body <<\EOF
 
 768 (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 
 769 (mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 
 770 (mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 
 771 (cc-cmd) Adding cc: cc-cmd@example.com from: './cccmd'
 
 773 Server: relay.example.com
 
 774 MAIL FROM:<from@example.com>
 
 775 RCPT TO:<to@example.com>
 
 776 RCPT TO:<author@example.com>
 
 777 RCPT TO:<one@example.com>
 
 778 RCPT TO:<two@example.com>
 
 779 RCPT TO:<cc-cmd@example.com>
 
 780 From: Example <from@example.com>
 
 782 Cc: A <author@example.com>,
 
 783         One <one@example.com>,
 
 786 Subject: [PATCH 1/1] Second.
 
 788 Message-Id: MESSAGE-ID-STRING
 
 789 X-Mailer: X-MAILER-STRING
 
 791 Content-Transfer-Encoding: 8bit
 
 797 test_expect_success $PREREQ '--suppress-cc=body' '
 
 798         test_suppression body
 
 801 test_expect_success $PREREQ 'setup expect' "
 
 802 cat >expected-suppress-body-cccmd <<\EOF
 
 804 (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 
 805 (mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 
 806 (mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 
 808 Server: relay.example.com
 
 809 MAIL FROM:<from@example.com>
 
 810 RCPT TO:<to@example.com>
 
 811 RCPT TO:<author@example.com>
 
 812 RCPT TO:<one@example.com>
 
 813 RCPT TO:<two@example.com>
 
 814 From: Example <from@example.com>
 
 816 Cc: A <author@example.com>,
 
 817         One <one@example.com>,
 
 819 Subject: [PATCH 1/1] Second.
 
 821 Message-Id: MESSAGE-ID-STRING
 
 822 X-Mailer: X-MAILER-STRING
 
 824 Content-Transfer-Encoding: 8bit
 
 830 test_expect_success $PREREQ '--suppress-cc=body --suppress-cc=cccmd' '
 
 831         test_suppression body cccmd
 
 834 test_expect_success $PREREQ 'setup expect' "
 
 835 cat >expected-suppress-sob <<\EOF
 
 837 (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 
 838 (mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 
 839 (mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 
 841 Server: relay.example.com
 
 842 MAIL FROM:<from@example.com>
 
 843 RCPT TO:<to@example.com>
 
 844 RCPT TO:<author@example.com>
 
 845 RCPT TO:<one@example.com>
 
 846 RCPT TO:<two@example.com>
 
 847 From: Example <from@example.com>
 
 849 Cc: A <author@example.com>,
 
 850         One <one@example.com>,
 
 852 Subject: [PATCH 1/1] Second.
 
 854 Message-Id: MESSAGE-ID-STRING
 
 855 X-Mailer: X-MAILER-STRING
 
 857 Content-Transfer-Encoding: 8bit
 
 863 test_expect_success $PREREQ '--suppress-cc=sob' '
 
 864         test_might_fail git config --unset sendemail.cccmd &&
 
 868 test_expect_success $PREREQ 'setup expect' "
 
 869 cat >expected-suppress-bodycc <<\EOF
 
 871 (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 
 872 (mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 
 873 (mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 
 874 (body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
 
 876 Server: relay.example.com
 
 877 MAIL FROM:<from@example.com>
 
 878 RCPT TO:<to@example.com>
 
 879 RCPT TO:<author@example.com>
 
 880 RCPT TO:<one@example.com>
 
 881 RCPT TO:<two@example.com>
 
 882 RCPT TO:<committer@example.com>
 
 883 From: Example <from@example.com>
 
 885 Cc: A <author@example.com>,
 
 886         One <one@example.com>,
 
 888         C O Mitter <committer@example.com>
 
 889 Subject: [PATCH 1/1] Second.
 
 891 Message-Id: MESSAGE-ID-STRING
 
 892 X-Mailer: X-MAILER-STRING
 
 894 Content-Transfer-Encoding: 8bit
 
 900 test_expect_success $PREREQ '--suppress-cc=bodycc' '
 
 901         test_suppression bodycc
 
 904 test_expect_success $PREREQ 'setup expect' "
 
 905 cat >expected-suppress-cc <<\EOF
 
 907 (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 
 908 (body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
 
 910 Server: relay.example.com
 
 911 MAIL FROM:<from@example.com>
 
 912 RCPT TO:<to@example.com>
 
 913 RCPT TO:<author@example.com>
 
 914 RCPT TO:<committer@example.com>
 
 915 From: Example <from@example.com>
 
 917 Cc: A <author@example.com>,
 
 918         C O Mitter <committer@example.com>
 
 919 Subject: [PATCH 1/1] Second.
 
 921 Message-Id: MESSAGE-ID-STRING
 
 922 X-Mailer: X-MAILER-STRING
 
 924 Content-Transfer-Encoding: 8bit
 
 930 test_expect_success $PREREQ '--suppress-cc=cc' '
 
 936                 GIT_SEND_EMAIL_NOTTY=1 \
 
 938                 --from="Example <nobody@example.com>" \
 
 939                 --to=nobody@example.com \
 
 940                 --smtp-server="$(pwd)/fake.sendmail" \
 
 941                 $@ $patches >stdout &&
 
 942         grep "Send this email" stdout
 
 945 test_expect_success $PREREQ '--confirm=always' '
 
 946         test_confirm --confirm=always --suppress-cc=all
 
 949 test_expect_success $PREREQ '--confirm=auto' '
 
 950         test_confirm --confirm=auto
 
 953 test_expect_success $PREREQ '--confirm=cc' '
 
 954         test_confirm --confirm=cc
 
 957 test_expect_success $PREREQ '--confirm=compose' '
 
 958         test_confirm --confirm=compose --compose
 
 961 test_expect_success $PREREQ 'confirm by default (due to cc)' '
 
 962         test_when_finished git config sendemail.confirm never &&
 
 963         git config --unset sendemail.confirm &&
 
 967 test_expect_success $PREREQ 'confirm by default (due to --compose)' '
 
 968         test_when_finished git config sendemail.confirm never &&
 
 969         git config --unset sendemail.confirm &&
 
 970         test_confirm --suppress-cc=all --compose
 
 973 test_expect_success $PREREQ 'confirm detects EOF (inform assumes y)' '
 
 974         test_when_finished git config sendemail.confirm never &&
 
 975         git config --unset sendemail.confirm &&
 
 977         git format-patch -2 -o outdir &&
 
 978         GIT_SEND_EMAIL_NOTTY=1 \
 
 980                         --from="Example <nobody@example.com>" \
 
 981                         --to=nobody@example.com \
 
 982                         --smtp-server="$(pwd)/fake.sendmail" \
 
 983                         outdir/*.patch </dev/null
 
 986 test_expect_success $PREREQ 'confirm detects EOF (auto causes failure)' '
 
 987         test_when_finished git config sendemail.confirm never &&
 
 988         git config sendemail.confirm auto &&
 
 989         GIT_SEND_EMAIL_NOTTY=1 &&
 
 990         export GIT_SEND_EMAIL_NOTTY &&
 
 991                 test_must_fail git send-email \
 
 992                         --from="Example <nobody@example.com>" \
 
 993                         --to=nobody@example.com \
 
 994                         --smtp-server="$(pwd)/fake.sendmail" \
 
 998 test_expect_success $PREREQ 'confirm does not loop forever' '
 
 999         test_when_finished git config sendemail.confirm never &&
 
1000         git config sendemail.confirm auto &&
 
1001         GIT_SEND_EMAIL_NOTTY=1 &&
 
1002         export GIT_SEND_EMAIL_NOTTY &&
 
1003                 yes "bogus" | test_must_fail git send-email \
 
1004                         --from="Example <nobody@example.com>" \
 
1005                         --to=nobody@example.com \
 
1006                         --smtp-server="$(pwd)/fake.sendmail" \
 
1010 test_expect_success $PREREQ 'utf8 Cc is rfc2047 encoded' '
 
1011         clean_fake_sendmail &&
 
1013         git format-patch -1 -o outdir --cc="àéìöú <utf8@example.com>" &&
 
1015         --from="Example <nobody@example.com>" \
 
1016         --to=nobody@example.com \
 
1017         --smtp-server="$(pwd)/fake.sendmail" \
 
1020         grep "=?UTF-8?q?=C3=A0=C3=A9=C3=AC=C3=B6=C3=BA?= <utf8@example.com>"
 
1023 test_expect_success $PREREQ '--compose adds MIME for utf8 body' '
 
1024         clean_fake_sendmail &&
 
1025         write_script fake-editor-utf8 <<-\EOF &&
 
1026         echo "utf8 body: àéìöú" >>"$1"
 
1028         GIT_EDITOR="\"$(pwd)/fake-editor-utf8\"" \
 
1030                 --compose --subject foo \
 
1031                 --from="Example <nobody@example.com>" \
 
1032                 --to=nobody@example.com \
 
1033                 --smtp-server="$(pwd)/fake.sendmail" \
 
1035         grep "^utf8 body" msgtxt1 &&
 
1036         grep "^Content-Type: text/plain; charset=UTF-8" msgtxt1
 
1039 test_expect_success $PREREQ '--compose respects user mime type' '
 
1040         clean_fake_sendmail &&
 
1041         write_script fake-editor-utf8-mime <<-\EOF &&
 
1044         Content-Type: text/plain; charset=iso-8859-1
 
1045         Content-Transfer-Encoding: 8bit
 
1051         GIT_EDITOR="\"$(pwd)/fake-editor-utf8-mime\"" \
 
1053                 --compose --subject foo \
 
1054                 --from="Example <nobody@example.com>" \
 
1055                 --to=nobody@example.com \
 
1056                 --smtp-server="$(pwd)/fake.sendmail" \
 
1058         grep "^utf8 body" msgtxt1 &&
 
1059         grep "^Content-Type: text/plain; charset=iso-8859-1" msgtxt1 &&
 
1060         ! grep "^Content-Type: text/plain; charset=UTF-8" msgtxt1
 
1063 test_expect_success $PREREQ '--compose adds MIME for utf8 subject' '
 
1064         clean_fake_sendmail &&
 
1065         GIT_EDITOR="\"$(pwd)/fake-editor\"" \
 
1067                 --compose --subject utf8-sübjëct \
 
1068                 --from="Example <nobody@example.com>" \
 
1069                 --to=nobody@example.com \
 
1070                 --smtp-server="$(pwd)/fake.sendmail" \
 
1072         grep "^fake edit" msgtxt1 &&
 
1073         grep "^Subject: =?UTF-8?q?utf8-s=C3=BCbj=C3=ABct?=" msgtxt1
 
1076 test_expect_success $PREREQ 'utf8 author is correctly passed on' '
 
1077         clean_fake_sendmail &&
 
1078         test_commit weird_author &&
 
1079         test_when_finished "git reset --hard HEAD^" &&
 
1080         git commit --amend --author "Füñný Nâmé <odd_?=mail@example.com>" &&
 
1081         git format-patch --stdout -1 >funny_name.patch &&
 
1082         git send-email --from="Example <nobody@example.com>" \
 
1083                 --to=nobody@example.com \
 
1084                 --smtp-server="$(pwd)/fake.sendmail" \
 
1086         grep "^From: Füñný Nâmé <odd_?=mail@example.com>" msgtxt1
 
1089 test_expect_success $PREREQ 'utf8 sender is not duplicated' '
 
1090         clean_fake_sendmail &&
 
1091         test_commit weird_sender &&
 
1092         test_when_finished "git reset --hard HEAD^" &&
 
1093         git commit --amend --author "Füñný Nâmé <odd_?=mail@example.com>" &&
 
1094         git format-patch --stdout -1 >funny_name.patch &&
 
1095         git send-email --from="Füñný Nâmé <odd_?=mail@example.com>" \
 
1096                 --to=nobody@example.com \
 
1097                 --smtp-server="$(pwd)/fake.sendmail" \
 
1099         grep "^From: " msgtxt1 >msgfrom &&
 
1100         test_line_count = 1 msgfrom
 
1103 test_expect_success $PREREQ 'sendemail.composeencoding works' '
 
1104         clean_fake_sendmail &&
 
1105         git config sendemail.composeencoding iso-8859-1 &&
 
1106         write_script fake-editor-utf8 <<-\EOF &&
 
1107         echo "utf8 body: àéìöú" >>"$1"
 
1109         GIT_EDITOR="\"$(pwd)/fake-editor-utf8\"" \
 
1111                 --compose --subject foo \
 
1112                 --from="Example <nobody@example.com>" \
 
1113                 --to=nobody@example.com \
 
1114                 --smtp-server="$(pwd)/fake.sendmail" \
 
1116         grep "^utf8 body" msgtxt1 &&
 
1117         grep "^Content-Type: text/plain; charset=iso-8859-1" msgtxt1
 
1120 test_expect_success $PREREQ '--compose-encoding works' '
 
1121         clean_fake_sendmail &&
 
1122         write_script fake-editor-utf8 <<-\EOF &&
 
1123         echo "utf8 body: àéìöú" >>"$1"
 
1125         GIT_EDITOR="\"$(pwd)/fake-editor-utf8\"" \
 
1127                 --compose-encoding iso-8859-1 \
 
1128                 --compose --subject foo \
 
1129                 --from="Example <nobody@example.com>" \
 
1130                 --to=nobody@example.com \
 
1131                 --smtp-server="$(pwd)/fake.sendmail" \
 
1133         grep "^utf8 body" msgtxt1 &&
 
1134         grep "^Content-Type: text/plain; charset=iso-8859-1" msgtxt1
 
1137 test_expect_success $PREREQ '--compose-encoding overrides sendemail.composeencoding' '
 
1138         clean_fake_sendmail &&
 
1139         git config sendemail.composeencoding iso-8859-1 &&
 
1140         write_script fake-editor-utf8 <<-\EOF &&
 
1141         echo "utf8 body: àéìöú" >>"$1"
 
1143         GIT_EDITOR="\"$(pwd)/fake-editor-utf8\"" \
 
1145                 --compose-encoding iso-8859-2 \
 
1146                 --compose --subject foo \
 
1147                 --from="Example <nobody@example.com>" \
 
1148                 --to=nobody@example.com \
 
1149                 --smtp-server="$(pwd)/fake.sendmail" \
 
1151         grep "^utf8 body" msgtxt1 &&
 
1152         grep "^Content-Type: text/plain; charset=iso-8859-2" msgtxt1
 
1155 test_expect_success $PREREQ '--compose-encoding adds correct MIME for subject' '
 
1156         clean_fake_sendmail &&
 
1157         GIT_EDITOR="\"$(pwd)/fake-editor\"" \
 
1159                 --compose-encoding iso-8859-2 \
 
1160                 --compose --subject utf8-sübjëct \
 
1161                 --from="Example <nobody@example.com>" \
 
1162                 --to=nobody@example.com \
 
1163                 --smtp-server="$(pwd)/fake.sendmail" \
 
1165         grep "^fake edit" msgtxt1 &&
 
1166         grep "^Subject: =?iso-8859-2?q?utf8-s=C3=BCbj=C3=ABct?=" msgtxt1
 
1169 test_expect_success $PREREQ 'detects ambiguous reference/file conflict' '
 
1170         echo master >master &&
 
1172         git commit -m"add master" &&
 
1173         test_must_fail git send-email --dry-run master 2>errors &&
 
1174         grep disambiguate errors
 
1177 test_expect_success $PREREQ 'feed two files' '
 
1179         git format-patch -2 -o outdir &&
 
1182                 --from="Example <nobody@example.com>" \
 
1183                 --to=nobody@example.com \
 
1184                 outdir/000?-*.patch 2>errors >out &&
 
1185         grep "^Subject: " out >subjects &&
 
1186         test "z$(sed -n -e 1p subjects)" = "zSubject: [PATCH 1/2] Second." &&
 
1187         test "z$(sed -n -e 2p subjects)" = "zSubject: [PATCH 2/2] add master"
 
1190 test_expect_success $PREREQ 'in-reply-to but no threading' '
 
1193                 --from="Example <nobody@example.com>" \
 
1194                 --to=nobody@example.com \
 
1195                 --in-reply-to="<in-reply-id@example.com>" \
 
1198         grep "In-Reply-To: <in-reply-id@example.com>" out
 
1201 test_expect_success $PREREQ 'no in-reply-to and no threading' '
 
1204                 --from="Example <nobody@example.com>" \
 
1205                 --to=nobody@example.com \
 
1208         ! grep "In-Reply-To: " stdout
 
1211 test_expect_success $PREREQ 'threading but no chain-reply-to' '
 
1214                 --from="Example <nobody@example.com>" \
 
1215                 --to=nobody@example.com \
 
1217                 --no-chain-reply-to \
 
1218                 $patches $patches >stdout &&
 
1219         grep "In-Reply-To: " stdout
 
1222 test_expect_success $PREREQ 'sendemail.to works' '
 
1223         git config --replace-all sendemail.to "Somebody <somebody@ex.com>" &&
 
1226                 --from="Example <nobody@example.com>" \
 
1228         grep "To: Somebody <somebody@ex.com>" stdout
 
1231 test_expect_success $PREREQ 'setup sendemail.identity' '
 
1232         git config --replace-all sendemail.to "default@example.com" &&
 
1233         git config --replace-all sendemail.isp.to "isp@example.com" &&
 
1234         git config --replace-all sendemail.cloud.to "cloud@example.com"
 
1237 test_expect_success $PREREQ 'sendemail.identity: reads the correct identity config' '
 
1238         git -c sendemail.identity=cloud send-email \
 
1240                 --from="nobody@example.com" \
 
1242         grep "To: cloud@example.com" stdout
 
1245 test_expect_success $PREREQ 'sendemail.identity: identity overrides sendemail.identity' '
 
1246         git -c sendemail.identity=cloud send-email \
 
1249                 --from="nobody@example.com" \
 
1251         grep "To: isp@example.com" stdout
 
1254 test_expect_success $PREREQ 'sendemail.identity: --no-identity clears previous identity' '
 
1255         git -c sendemail.identity=cloud send-email \
 
1258                 --from="nobody@example.com" \
 
1260         grep "To: default@example.com" stdout
 
1263 test_expect_success $PREREQ 'sendemail.identity: bool identity variable existence overrides' '
 
1264         git -c sendemail.identity=cloud \
 
1265                 -c sendemail.xmailer=true \
 
1266                 -c sendemail.cloud.xmailer=false \
 
1269                 --from="nobody@example.com" \
 
1271         grep "To: cloud@example.com" stdout &&
 
1272         ! grep "X-Mailer" stdout
 
1275 test_expect_success $PREREQ 'sendemail.identity: bool variable fallback' '
 
1276         git -c sendemail.identity=cloud \
 
1277                 -c sendemail.xmailer=false \
 
1280                 --from="nobody@example.com" \
 
1282         grep "To: cloud@example.com" stdout &&
 
1283         ! grep "X-Mailer" stdout
 
1286 test_expect_success $PREREQ '--no-to overrides sendemail.to' '
 
1289                 --from="Example <nobody@example.com>" \
 
1291                 --to=nobody@example.com \
 
1293         grep "To: nobody@example.com" stdout &&
 
1294         ! grep "To: Somebody <somebody@ex.com>" stdout
 
1297 test_expect_success $PREREQ 'sendemail.cc works' '
 
1298         git config --replace-all sendemail.cc "Somebody <somebody@ex.com>" &&
 
1301                 --from="Example <nobody@example.com>" \
 
1302                 --to=nobody@example.com \
 
1304         grep "Cc: Somebody <somebody@ex.com>" stdout
 
1307 test_expect_success $PREREQ '--no-cc overrides sendemail.cc' '
 
1310                 --from="Example <nobody@example.com>" \
 
1312                 --cc=bodies@example.com \
 
1313                 --to=nobody@example.com \
 
1315         grep "Cc: bodies@example.com" stdout &&
 
1316         ! grep "Cc: Somebody <somebody@ex.com>" stdout
 
1319 test_expect_success $PREREQ 'sendemail.bcc works' '
 
1320         git config --replace-all sendemail.bcc "Other <other@ex.com>" &&
 
1323                 --from="Example <nobody@example.com>" \
 
1324                 --to=nobody@example.com \
 
1325                 --smtp-server relay.example.com \
 
1327         grep "RCPT TO:<other@ex.com>" stdout
 
1330 test_expect_success $PREREQ '--no-bcc overrides sendemail.bcc' '
 
1333                 --from="Example <nobody@example.com>" \
 
1335                 --bcc=bodies@example.com \
 
1336                 --to=nobody@example.com \
 
1337                 --smtp-server relay.example.com \
 
1339         grep "RCPT TO:<bodies@example.com>" stdout &&
 
1340         ! grep "RCPT TO:<other@ex.com>" stdout
 
1343 test_expect_success $PREREQ 'patches To headers are used by default' '
 
1344         patch=$(git format-patch -1 --to="bodies@example.com") &&
 
1345         test_when_finished "rm $patch" &&
 
1348                 --from="Example <nobody@example.com>" \
 
1349                 --smtp-server relay.example.com \
 
1351         grep "RCPT TO:<bodies@example.com>" stdout
 
1354 test_expect_success $PREREQ 'patches To headers are appended to' '
 
1355         patch=$(git format-patch -1 --to="bodies@example.com") &&
 
1356         test_when_finished "rm $patch" &&
 
1359                 --from="Example <nobody@example.com>" \
 
1360                 --to=nobody@example.com \
 
1361                 --smtp-server relay.example.com \
 
1363         grep "RCPT TO:<bodies@example.com>" stdout &&
 
1364         grep "RCPT TO:<nobody@example.com>" stdout
 
1367 test_expect_success $PREREQ 'To headers from files reset each patch' '
 
1368         patch1=$(git format-patch -1 --to="bodies@example.com") &&
 
1369         patch2=$(git format-patch -1 --to="other@example.com" HEAD~) &&
 
1370         test_when_finished "rm $patch1 && rm $patch2" &&
 
1373                 --from="Example <nobody@example.com>" \
 
1374                 --to="nobody@example.com" \
 
1375                 --smtp-server relay.example.com \
 
1376                 $patch1 $patch2 >stdout &&
 
1377         test $(grep -c "RCPT TO:<bodies@example.com>" stdout) = 1 &&
 
1378         test $(grep -c "RCPT TO:<nobody@example.com>" stdout) = 2 &&
 
1379         test $(grep -c "RCPT TO:<other@example.com>" stdout) = 1
 
1382 test_expect_success $PREREQ 'setup expect' '
 
1383 cat >email-using-8bit <<\EOF
 
1384 From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
 
1385 Message-Id: <bogus-message-id@example.com>
 
1386 From: author@example.com
 
1387 Date: Sat, 12 Jun 2010 15:53:58 +0200
 
1388 Subject: subject goes here
 
1390 Dieser deutsche Text enthält einen Umlaut!
 
1394 test_expect_success $PREREQ 'setup expect' '
 
1395         echo "Subject: subject goes here" >expected
 
1398 test_expect_success $PREREQ 'ASCII subject is not RFC2047 quoted' '
 
1399         clean_fake_sendmail &&
 
1401         git send-email --from=author@example.com --to=nobody@example.com \
 
1402                         --smtp-server="$(pwd)/fake.sendmail" \
 
1403                         --8bit-encoding=UTF-8 \
 
1404                         email-using-8bit >stdout &&
 
1405         grep "Subject" msgtxt1 >actual &&
 
1406         test_cmp expected actual
 
1409 test_expect_success $PREREQ 'setup expect' '
 
1410         cat >content-type-decl <<-\EOF
 
1412         Content-Type: text/plain; charset=UTF-8
 
1413         Content-Transfer-Encoding: 8bit
 
1417 test_expect_success $PREREQ 'asks about and fixes 8bit encodings' '
 
1418         clean_fake_sendmail &&
 
1420         git send-email --from=author@example.com --to=nobody@example.com \
 
1421                         --smtp-server="$(pwd)/fake.sendmail" \
 
1422                         email-using-8bit >stdout &&
 
1423         grep "do not declare a Content-Transfer-Encoding" stdout &&
 
1424         grep email-using-8bit stdout &&
 
1425         grep "Which 8bit encoding" stdout &&
 
1426         egrep "Content|MIME" msgtxt1 >actual &&
 
1427         test_cmp content-type-decl actual
 
1430 test_expect_success $PREREQ 'sendemail.8bitEncoding works' '
 
1431         clean_fake_sendmail &&
 
1432         git config sendemail.assume8bitEncoding UTF-8 &&
 
1434         git send-email --from=author@example.com --to=nobody@example.com \
 
1435                         --smtp-server="$(pwd)/fake.sendmail" \
 
1436                         email-using-8bit >stdout &&
 
1437         egrep "Content|MIME" msgtxt1 >actual &&
 
1438         test_cmp content-type-decl actual
 
1441 test_expect_success $PREREQ '--8bit-encoding overrides sendemail.8bitEncoding' '
 
1442         clean_fake_sendmail &&
 
1443         git config sendemail.assume8bitEncoding "bogus too" &&
 
1445         git send-email --from=author@example.com --to=nobody@example.com \
 
1446                         --smtp-server="$(pwd)/fake.sendmail" \
 
1447                         --8bit-encoding=UTF-8 \
 
1448                         email-using-8bit >stdout &&
 
1449         egrep "Content|MIME" msgtxt1 >actual &&
 
1450         test_cmp content-type-decl actual
 
1453 test_expect_success $PREREQ 'setup expect' '
 
1454         cat >email-using-8bit <<-\EOF
 
1455         From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
 
1456         Message-Id: <bogus-message-id@example.com>
 
1457         From: author@example.com
 
1458         Date: Sat, 12 Jun 2010 15:53:58 +0200
 
1459         Subject: Dieser Betreff enthält auch einen Umlaut!
 
1461         Nothing to see here.
 
1465 test_expect_success $PREREQ 'setup expect' '
 
1466         cat >expected <<-\EOF
 
1467         Subject: =?UTF-8?q?Dieser=20Betreff=20enth=C3=A4lt=20auch=20einen=20Umlaut!?=
 
1471 test_expect_success $PREREQ '--8bit-encoding also treats subject' '
 
1472         clean_fake_sendmail &&
 
1474         git send-email --from=author@example.com --to=nobody@example.com \
 
1475                         --smtp-server="$(pwd)/fake.sendmail" \
 
1476                         --8bit-encoding=UTF-8 \
 
1477                         email-using-8bit >stdout &&
 
1478         grep "Subject" msgtxt1 >actual &&
 
1479         test_cmp expected actual
 
1482 test_expect_success $PREREQ 'setup expect' '
 
1483         cat >email-using-8bit <<-\EOF
 
1484         From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
 
1485         Message-Id: <bogus-message-id@example.com>
 
1486         From: A U Thor <author@example.com>
 
1487         Date: Sat, 12 Jun 2010 15:53:58 +0200
 
1488         Content-Type: text/plain; charset=UTF-8
 
1489         Subject: Nothing to see here.
 
1491         Dieser Betreff enthält auch einen Umlaut!
 
1495 test_expect_success $PREREQ '--transfer-encoding overrides sendemail.transferEncoding' '
 
1496         clean_fake_sendmail &&
 
1497         test_must_fail git -c sendemail.transferEncoding=8bit \
 
1499                 --transfer-encoding=7bit \
 
1500                 --smtp-server="$(pwd)/fake.sendmail" \
 
1503         grep "cannot send message as 7bit" errors &&
 
1504         test -z "$(ls msgtxt*)"
 
1507 test_expect_success $PREREQ 'sendemail.transferEncoding via config' '
 
1508         clean_fake_sendmail &&
 
1509         test_must_fail git -c sendemail.transferEncoding=7bit \
 
1511                 --smtp-server="$(pwd)/fake.sendmail" \
 
1514         grep "cannot send message as 7bit" errors &&
 
1515         test -z "$(ls msgtxt*)"
 
1518 test_expect_success $PREREQ 'sendemail.transferEncoding via cli' '
 
1519         clean_fake_sendmail &&
 
1520         test_must_fail git send-email \
 
1521                 --transfer-encoding=7bit \
 
1522                 --smtp-server="$(pwd)/fake.sendmail" \
 
1525         grep "cannot send message as 7bit" errors &&
 
1526         test -z "$(ls msgtxt*)"
 
1529 test_expect_success $PREREQ 'setup expect' '
 
1530         cat >expected <<-\EOF
 
1531         Dieser Betreff enth=C3=A4lt auch einen Umlaut!
 
1535 test_expect_success $PREREQ '8-bit and sendemail.transferencoding=quoted-printable' '
 
1536         clean_fake_sendmail &&
 
1538                 --transfer-encoding=quoted-printable \
 
1539                 --smtp-server="$(pwd)/fake.sendmail" \
 
1542         sed '1,/^$/d' msgtxt1 >actual &&
 
1543         test_cmp expected actual
 
1546 test_expect_success $PREREQ 'setup expect' '
 
1547         cat >expected <<-\EOF
 
1548         RGllc2VyIEJldHJlZmYgZW50aMOkbHQgYXVjaCBlaW5lbiBVbWxhdXQhCg==
 
1552 test_expect_success $PREREQ '8-bit and sendemail.transferencoding=base64' '
 
1553         clean_fake_sendmail &&
 
1555                 --transfer-encoding=base64 \
 
1556                 --smtp-server="$(pwd)/fake.sendmail" \
 
1559         sed '1,/^$/d' msgtxt1 >actual &&
 
1560         test_cmp expected actual
 
1563 test_expect_success $PREREQ 'setup expect' '
 
1564         cat >email-using-qp <<-\EOF
 
1565         From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
 
1566         Message-Id: <bogus-message-id@example.com>
 
1567         From: A U Thor <author@example.com>
 
1568         Date: Sat, 12 Jun 2010 15:53:58 +0200
 
1570         Content-Transfer-Encoding: quoted-printable
 
1571         Content-Type: text/plain; charset=UTF-8
 
1572         Subject: Nothing to see here.
 
1574         Dieser Betreff enth=C3=A4lt auch einen Umlaut!
 
1578 test_expect_success $PREREQ 'convert from quoted-printable to base64' '
 
1579         clean_fake_sendmail &&
 
1581                 --transfer-encoding=base64 \
 
1582                 --smtp-server="$(pwd)/fake.sendmail" \
 
1585         sed '1,/^$/d' msgtxt1 >actual &&
 
1586         test_cmp expected actual
 
1589 test_expect_success $PREREQ 'setup expect' "
 
1590 tr -d '\\015' | tr '%' '\\015' >email-using-crlf <<EOF
 
1591 From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
 
1592 Message-Id: <bogus-message-id@example.com>
 
1593 From: A U Thor <author@example.com>
 
1594 Date: Sat, 12 Jun 2010 15:53:58 +0200
 
1595 Content-Type: text/plain; charset=UTF-8
 
1596 Subject: Nothing to see here.
 
1598 Look, I have a CRLF and an = sign!%
 
1602 test_expect_success $PREREQ 'setup expect' '
 
1603         cat >expected <<-\EOF
 
1604         Look, I have a CRLF and an =3D sign!=0D
 
1608 test_expect_success $PREREQ 'CRLF and sendemail.transferencoding=quoted-printable' '
 
1609         clean_fake_sendmail &&
 
1611                 --transfer-encoding=quoted-printable \
 
1612                 --smtp-server="$(pwd)/fake.sendmail" \
 
1615         sed '1,/^$/d' msgtxt1 >actual &&
 
1616         test_cmp expected actual
 
1619 test_expect_success $PREREQ 'setup expect' '
 
1620         cat >expected <<-\EOF
 
1621         TG9vaywgSSBoYXZlIGEgQ1JMRiBhbmQgYW4gPSBzaWduIQ0K
 
1625 test_expect_success $PREREQ 'CRLF and sendemail.transferencoding=base64' '
 
1626         clean_fake_sendmail &&
 
1628                 --transfer-encoding=base64 \
 
1629                 --smtp-server="$(pwd)/fake.sendmail" \
 
1632         sed '1,/^$/d' msgtxt1 >actual &&
 
1633         test_cmp expected actual
 
1637 # Note that the patches in this test are deliberately out of order; we
 
1638 # want to make sure it works even if the cover-letter is not in the
 
1640 test_expect_success $PREREQ 'refusing to send cover letter template' '
 
1641         clean_fake_sendmail &&
 
1643         git format-patch --cover-letter -2 -o outdir &&
 
1644         test_must_fail git send-email \
 
1645                 --from="Example <nobody@example.com>" \
 
1646                 --to=nobody@example.com \
 
1647                 --smtp-server="$(pwd)/fake.sendmail" \
 
1648                 outdir/0002-*.patch \
 
1649                 outdir/0000-*.patch \
 
1650                 outdir/0001-*.patch \
 
1652         grep "SUBJECT HERE" errors &&
 
1653         test -z "$(ls msgtxt*)"
 
1656 test_expect_success $PREREQ '--force sends cover letter template anyway' '
 
1657         clean_fake_sendmail &&
 
1659         git format-patch --cover-letter -2 -o outdir &&
 
1662                 --from="Example <nobody@example.com>" \
 
1663                 --to=nobody@example.com \
 
1664                 --smtp-server="$(pwd)/fake.sendmail" \
 
1665                 outdir/0002-*.patch \
 
1666                 outdir/0000-*.patch \
 
1667                 outdir/0001-*.patch \
 
1669         ! grep "SUBJECT HERE" errors &&
 
1670         test -n "$(ls msgtxt*)"
 
1673 test_cover_addresses () {
 
1676         clean_fake_sendmail &&
 
1678         git format-patch --cover-letter -2 -o outdir &&
 
1679         cover=$(echo outdir/0000-*.patch) &&
 
1680         mv $cover cover-to-edit.patch &&
 
1681         perl -pe "s/^From:/$header: extra\@address.com\nFrom:/" cover-to-edit.patch >"$cover" &&
 
1684                 --from="Example <nobody@example.com>" \
 
1687                 --smtp-server="$(pwd)/fake.sendmail" \
 
1688                 outdir/0000-*.patch \
 
1689                 outdir/0001-*.patch \
 
1690                 outdir/0002-*.patch \
 
1692         grep "^$header: extra@address.com" msgtxt1 >to1 &&
 
1693         grep "^$header: extra@address.com" msgtxt2 >to2 &&
 
1694         grep "^$header: extra@address.com" msgtxt3 >to3 &&
 
1695         test_line_count = 1 to1 &&
 
1696         test_line_count = 1 to2 &&
 
1697         test_line_count = 1 to3
 
1700 test_expect_success $PREREQ 'to-cover adds To to all mail' '
 
1701         test_cover_addresses "To" --to-cover
 
1704 test_expect_success $PREREQ 'cc-cover adds Cc to all mail' '
 
1705         test_cover_addresses "Cc" --cc-cover
 
1708 test_expect_success $PREREQ 'tocover adds To to all mail' '
 
1709         test_config sendemail.tocover true &&
 
1710         test_cover_addresses "To"
 
1713 test_expect_success $PREREQ 'cccover adds Cc to all mail' '
 
1714         test_config sendemail.cccover true &&
 
1715         test_cover_addresses "Cc"
 
1718 test_expect_success $PREREQ 'escaped quotes in sendemail.aliasfiletype=mutt' '
 
1719         clean_fake_sendmail &&
 
1720         echo "alias sbd \\\"Dot U. Sir\\\" <somebody@example.org>" >.mutt &&
 
1721         git config --replace-all sendemail.aliasesfile "$(pwd)/.mutt" &&
 
1722         git config sendemail.aliasfiletype mutt &&
 
1724                 --from="Example <nobody@example.com>" \
 
1726                 --smtp-server="$(pwd)/fake.sendmail" \
 
1727                 outdir/0001-*.patch \
 
1729         grep "^!somebody@example\.org!$" commandline1 &&
 
1730         grep -F "To: \"Dot U. Sir\" <somebody@example.org>" out
 
1733 test_expect_success $PREREQ 'sendemail.aliasfiletype=mailrc' '
 
1734         clean_fake_sendmail &&
 
1735         echo "alias sbd  somebody@example.org" >.mailrc &&
 
1736         git config --replace-all sendemail.aliasesfile "$(pwd)/.mailrc" &&
 
1737         git config sendemail.aliasfiletype mailrc &&
 
1739                 --from="Example <nobody@example.com>" \
 
1741                 --smtp-server="$(pwd)/fake.sendmail" \
 
1742                 outdir/0001-*.patch \
 
1744         grep "^!somebody@example\.org!$" commandline1
 
1747 test_expect_success $PREREQ 'sendemail.aliasfile=~/.mailrc' '
 
1748         clean_fake_sendmail &&
 
1749         echo "alias sbd  someone@example.org" >"$HOME/.mailrc" &&
 
1750         git config --replace-all sendemail.aliasesfile "~/.mailrc" &&
 
1751         git config sendemail.aliasfiletype mailrc &&
 
1753                 --from="Example <nobody@example.com>" \
 
1755                 --smtp-server="$(pwd)/fake.sendmail" \
 
1756                 outdir/0001-*.patch \
 
1758         grep "^!someone@example\.org!$" commandline1
 
1761 test_dump_aliases () {
 
1762         msg="$1" && shift &&
 
1763         filetype="$1" && shift &&
 
1764         printf '%s\n' "$@" >expect &&
 
1765         cat >.tmp-email-aliases &&
 
1767         test_expect_success $PREREQ "$msg" '
 
1768                 clean_fake_sendmail && rm -fr outdir &&
 
1769                 git config --replace-all sendemail.aliasesfile \
 
1770                         "$(pwd)/.tmp-email-aliases" &&
 
1771                 git config sendemail.aliasfiletype "$filetype" &&
 
1772                 git send-email --dump-aliases 2>errors >actual &&
 
1773                 test_cmp expect actual
 
1777 test_dump_aliases '--dump-aliases sendmail format' \
 
1784         alice: Alice W Land <awol@example.com>
 
1785         bob: Robert Bobbyton <bob@example.com>
 
1786         chloe: chloe@example.com
 
1788         bcgrp: bob, chloe, Other <o@example.com>
 
1791 test_dump_aliases '--dump-aliases mutt format' \
 
1797         alias alice Alice W Land <awol@example.com>
 
1798         alias donald Donald C Carlton <donc@example.com>
 
1799         alias bob Robert Bobbyton <bob@example.com>
 
1800         alias chloe chloe@example.com
 
1803 test_dump_aliases '--dump-aliases mailrc format' \
 
1809         alias alice   Alice W Land <awol@example.com>
 
1810         alias eve     Eve <eve@example.com>
 
1811         alias bob     Robert Bobbyton <bob@example.com>
 
1812         alias chloe   chloe@example.com
 
1815 test_dump_aliases '--dump-aliases pine format' \
 
1821         alice   Alice W Land    <awol@example.com>
 
1822         eve     Eve     <eve@example.com>
 
1823         bob     Robert  Bobbyton <bob@example.com>
 
1824         chloe           chloe@example.com
 
1827 test_dump_aliases '--dump-aliases gnus format' \
 
1833         (define-mail-alias "alice" "awol@example.com")
 
1834         (define-mail-alias "eve" "eve@example.com")
 
1835         (define-mail-alias "bob" "bob@example.com")
 
1836         (define-mail-alias "chloe" "chloe@example.com")
 
1839 test_expect_success '--dump-aliases must be used alone' '
 
1840         test_must_fail git send-email --dump-aliases --to=janice@example.com -1 refs/heads/accounting
 
1843 test_expect_success $PREREQ 'aliases and sendemail.identity' '
 
1844         test_must_fail git \
 
1845                 -c sendemail.identity=cloud \
 
1846                 -c sendemail.aliasesfile=default-aliases \
 
1847                 -c sendemail.cloud.aliasesfile=cloud-aliases \
 
1848                 send-email -1 2>stderr &&
 
1849         test_i18ngrep "cloud-aliases" stderr
 
1852 test_sendmail_aliases () {
 
1853         msg="$1" && shift &&
 
1855         cat >.tmp-email-aliases &&
 
1857         test_expect_success $PREREQ "$msg" '
 
1858                 clean_fake_sendmail && rm -fr outdir &&
 
1859                 git format-patch -1 -o outdir &&
 
1860                 git config --replace-all sendemail.aliasesfile \
 
1861                         "$(pwd)/.tmp-email-aliases" &&
 
1862                 git config sendemail.aliasfiletype sendmail &&
 
1864                         --from="Example <nobody@example.com>" \
 
1865                         --to=alice --to=bcgrp \
 
1866                         --smtp-server="$(pwd)/fake.sendmail" \
 
1867                         outdir/0001-*.patch \
 
1871                         grep "^!$i!$" commandline1 || return 1
 
1876 test_sendmail_aliases 'sendemail.aliasfiletype=sendmail' \
 
1877         'awol@example\.com' \
 
1878         'bob@example\.com' \
 
1879         'chloe@example\.com' \
 
1880         'o@example\.com' <<-\EOF
 
1881         alice: Alice W Land <awol@example.com>
 
1882         bob: Robert Bobbyton <bob@example.com>
 
1884            # this is also a comment
 
1885         chloe: chloe@example.com
 
1887         bcgrp: bob, chloe, Other <o@example.com>
 
1890 test_sendmail_aliases 'sendmail aliases line folding' \
 
1894         darla1 darla2 darla3 \
 
1895         elton1 elton2 elton3 \
 
1912         bcgrp: bob, chuck, darla, elton, fred, greg
 
1915 test_sendmail_aliases 'sendmail aliases tolerate bogus line folding' \
 
1921 test_sendmail_aliases 'sendmail aliases empty' alice bcgrp <<-\EOF
 
1924 test_expect_success $PREREQ 'alias support in To header' '
 
1925         clean_fake_sendmail &&
 
1926         echo "alias sbd  someone@example.org" >.mailrc &&
 
1927         test_config sendemail.aliasesfile ".mailrc" &&
 
1928         test_config sendemail.aliasfiletype mailrc &&
 
1929         git format-patch --stdout -1 --to=sbd >aliased.patch &&
 
1931                 --from="Example <nobody@example.com>" \
 
1932                 --smtp-server="$(pwd)/fake.sendmail" \
 
1935         grep "^!someone@example\.org!$" commandline1
 
1938 test_expect_success $PREREQ 'alias support in Cc header' '
 
1939         clean_fake_sendmail &&
 
1940         echo "alias sbd  someone@example.org" >.mailrc &&
 
1941         test_config sendemail.aliasesfile ".mailrc" &&
 
1942         test_config sendemail.aliasfiletype mailrc &&
 
1943         git format-patch --stdout -1 --cc=sbd >aliased.patch &&
 
1945                 --from="Example <nobody@example.com>" \
 
1946                 --smtp-server="$(pwd)/fake.sendmail" \
 
1949         grep "^!someone@example\.org!$" commandline1
 
1952 test_expect_success $PREREQ 'tocmd works with aliases' '
 
1953         clean_fake_sendmail &&
 
1954         echo "alias sbd  someone@example.org" >.mailrc &&
 
1955         test_config sendemail.aliasesfile ".mailrc" &&
 
1956         test_config sendemail.aliasfiletype mailrc &&
 
1957         git format-patch --stdout -1 >tocmd.patch &&
 
1958         echo tocmd--sbd >>tocmd.patch &&
 
1960                 --from="Example <nobody@example.com>" \
 
1961                 --to-cmd=./tocmd-sed \
 
1962                 --smtp-server="$(pwd)/fake.sendmail" \
 
1965         grep "^!someone@example\.org!$" commandline1
 
1968 test_expect_success $PREREQ 'cccmd works with aliases' '
 
1969         clean_fake_sendmail &&
 
1970         echo "alias sbd  someone@example.org" >.mailrc &&
 
1971         test_config sendemail.aliasesfile ".mailrc" &&
 
1972         test_config sendemail.aliasfiletype mailrc &&
 
1973         git format-patch --stdout -1 >cccmd.patch &&
 
1974         echo cccmd--sbd >>cccmd.patch &&
 
1976                 --from="Example <nobody@example.com>" \
 
1977                 --cc-cmd=./cccmd-sed \
 
1978                 --smtp-server="$(pwd)/fake.sendmail" \
 
1981         grep "^!someone@example\.org!$" commandline1
 
1984 do_xmailer_test () {
 
1985         expected=$1 params=$2 &&
 
1986         git format-patch -1 &&
 
1988                 --from="Example <nobody@example.com>" \
 
1989                 --to=someone@example.com \
 
1990                 --smtp-server="$(pwd)/fake.sendmail" \
 
1994         { grep '^X-Mailer:' out || :; } >mailer &&
 
1995         test_line_count = $expected mailer
 
1998 test_expect_success $PREREQ '--[no-]xmailer without any configuration' '
 
1999         do_xmailer_test 1 "--xmailer" &&
 
2000         do_xmailer_test 0 "--no-xmailer"
 
2003 test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer=true' '
 
2004         test_config sendemail.xmailer true &&
 
2005         do_xmailer_test 1 "" &&
 
2006         do_xmailer_test 0 "--no-xmailer" &&
 
2007         do_xmailer_test 1 "--xmailer"
 
2010 test_expect_success $PREREQ '--[no-]xmailer with sendemail.xmailer=false' '
 
2011         test_config sendemail.xmailer false &&
 
2012         do_xmailer_test 0 "" &&
 
2013         do_xmailer_test 0 "--no-xmailer" &&
 
2014         do_xmailer_test 1 "--xmailer"
 
2017 test_expect_success $PREREQ 'setup expected-list' '
 
2020         --from="Example <from@example.com>" \
 
2021         --to="To 1 <to1@example.com>" \
 
2022         --to="to2@example.com" \
 
2023         --to="to3@example.com" \
 
2024         --cc="Cc 1 <cc1@example.com>" \
 
2025         --cc="Cc2 <cc2@example.com>" \
 
2026         --bcc="bcc1@example.com" \
 
2027         --bcc="bcc2@example.com" \
 
2028         0001-add-master.patch | replace_variable_fields \
 
2032 test_expect_success $PREREQ 'use email list in --cc --to and --bcc' '
 
2035         --from="Example <from@example.com>" \
 
2036         --to="To 1 <to1@example.com>, to2@example.com" \
 
2037         --to="to3@example.com" \
 
2038         --cc="Cc 1 <cc1@example.com>, Cc2 <cc2@example.com>" \
 
2039         --bcc="bcc1@example.com, bcc2@example.com" \
 
2040         0001-add-master.patch | replace_variable_fields \
 
2042         test_cmp expected-list actual-list
 
2045 test_expect_success $PREREQ 'aliases work with email list' '
 
2046         echo "alias to2 to2@example.com" >.mutt &&
 
2047         echo "alias cc1 Cc 1 <cc1@example.com>" >>.mutt &&
 
2048         test_config sendemail.aliasesfile ".mutt" &&
 
2049         test_config sendemail.aliasfiletype mutt &&
 
2052         --from="Example <from@example.com>" \
 
2053         --to="To 1 <to1@example.com>, to2, to3@example.com" \
 
2054         --cc="cc1, Cc2 <cc2@example.com>" \
 
2055         --bcc="bcc1@example.com, bcc2@example.com" \
 
2056         0001-add-master.patch | replace_variable_fields \
 
2058         test_cmp expected-list actual-list
 
2061 test_expect_success $PREREQ 'leading and trailing whitespaces are removed' '
 
2062         echo "alias to2 to2@example.com" >.mutt &&
 
2063         echo "alias cc1 Cc 1 <cc1@example.com>" >>.mutt &&
 
2064         test_config sendemail.aliasesfile ".mutt" &&
 
2065         test_config sendemail.aliasfiletype mutt &&
 
2066         TO1=$(echo "QTo 1 <to1@example.com>" | q_to_tab) &&
 
2067         TO2=$(echo "QZto2" | qz_to_tab_space) &&
 
2068         CC1=$(echo "cc1" | append_cr) &&
 
2069         BCC1=$(echo " bcc1@example.com Q" | q_to_nul) &&
 
2072         --from="        Example <from@example.com>" \
 
2075         --to="  to3@example.com   " \
 
2077         --cc="Cc2 <cc2@example.com>" \
 
2079         --bcc="bcc2@example.com" \
 
2080         0001-add-master.patch | replace_variable_fields \
 
2082         test_cmp expected-list actual-list
 
2085 test_expect_success $PREREQ 'invoke hook' '
 
2086         mkdir -p .git/hooks &&
 
2088         write_script .git/hooks/sendemail-validate <<-\EOF &&
 
2089         # test that we have the correct environment variable, pwd, and
 
2099         test -f 0001-add-master.patch &&
 
2100         grep "add master" "$1"
 
2105                 # Test that it works even if we are not at the root of the
 
2109                         --from="Example <nobody@example.com>" \
 
2110                         --to=nobody@example.com \
 
2111                         --smtp-server="$(pwd)/../fake.sendmail" \
 
2112                         ../0001-add-master.patch &&
 
2114                 # Verify error message when a patch is rejected by the hook
 
2115                 sed -e "s/add master/x/" ../0001-add-master.patch >../another.patch &&
 
2116                 test_must_fail git send-email \
 
2117                         --from="Example <nobody@example.com>" \
 
2118                         --to=nobody@example.com \
 
2119                         --smtp-server="$(pwd)/../fake.sendmail" \
 
2120                         ../another.patch 2>err &&
 
2121                 test_i18ngrep "rejected by sendemail-validate hook" err
 
2125 test_expect_success $PREREQ 'test that send-email works outside a repo' '
 
2126         nongit git send-email \
 
2127                 --from="Example <nobody@example.com>" \
 
2128                 --to=nobody@example.com \
 
2129                 --smtp-server="$(pwd)/fake.sendmail" \
 
2130                 "$(pwd)/0001-add-master.patch"