t / t9001-send-email.shon commit apply: diagnose incomplete submodule object name better (e28efb1)
   1#!/bin/sh
   2
   3test_description='git send-email'
   4. ./test-lib.sh
   5
   6# May be altered later in the test
   7PREREQ="PERL"
   8
   9test_expect_success $PREREQ \
  10    'prepare reference tree' \
  11    'echo "1A quick brown fox jumps over the" >file &&
  12     echo "lazy dog" >>file &&
  13     git add file &&
  14     GIT_AUTHOR_NAME="A" git commit -a -m "Initial."'
  15
  16test_expect_success $PREREQ \
  17    'Setup helper tool' \
  18    '(echo "#!$SHELL_PATH"
  19      echo shift
  20      echo output=1
  21      echo "while test -f commandline\$output; do output=\$((\$output+1)); done"
  22      echo for a
  23      echo do
  24      echo "  echo \"!\$a!\""
  25      echo "done >commandline\$output"
  26      test_have_prereq MINGW && echo "dos2unix commandline\$output"
  27      echo "cat > msgtxt\$output"
  28      ) >fake.sendmail &&
  29     chmod +x ./fake.sendmail &&
  30     git add fake.sendmail &&
  31     GIT_AUTHOR_NAME="A" git commit -a -m "Second."'
  32
  33clean_fake_sendmail() {
  34        rm -f commandline* msgtxt*
  35}
  36
  37test_expect_success $PREREQ 'Extract patches' '
  38    patches=`git format-patch -s --cc="One <one@example.com>" --cc=two@example.com -n HEAD^1`
  39'
  40
  41# Test no confirm early to ensure remaining tests will not hang
  42test_no_confirm () {
  43        rm -f no_confirm_okay
  44        echo n | \
  45                GIT_SEND_EMAIL_NOTTY=1 \
  46                git send-email \
  47                --from="Example <from@example.com>" \
  48                --to=nobody@example.com \
  49                --smtp-server="$(pwd)/fake.sendmail" \
  50                $@ \
  51                $patches > stdout &&
  52                test_must_fail grep "Send this email" stdout &&
  53                > no_confirm_okay
  54}
  55
  56# Exit immediately to prevent hang if a no-confirm test fails
  57check_no_confirm () {
  58        if ! test -f no_confirm_okay
  59        then
  60                say 'confirm test failed; skipping remaining tests to prevent hanging'
  61                PREREQ="$PREREQ,CHECK_NO_CONFIRM"
  62        fi
  63        return 0
  64}
  65
  66test_expect_success $PREREQ 'No confirm with --suppress-cc' '
  67        test_no_confirm --suppress-cc=sob &&
  68        check_no_confirm
  69'
  70
  71
  72test_expect_success $PREREQ 'No confirm with --confirm=never' '
  73        test_no_confirm --confirm=never &&
  74        check_no_confirm
  75'
  76
  77# leave sendemail.confirm set to never after this so that none of the
  78# remaining tests prompt unintentionally.
  79test_expect_success $PREREQ 'No confirm with sendemail.confirm=never' '
  80        git config sendemail.confirm never &&
  81        test_no_confirm --compose --subject=foo &&
  82        check_no_confirm
  83'
  84
  85test_expect_success $PREREQ 'Send patches' '
  86     git send-email --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
  87'
  88
  89test_expect_success $PREREQ 'setup expect' '
  90cat >expected <<\EOF
  91!nobody@example.com!
  92!author@example.com!
  93!one@example.com!
  94!two@example.com!
  95EOF
  96'
  97
  98test_expect_success $PREREQ \
  99    'Verify commandline' \
 100    'test_cmp expected commandline1'
 101
 102test_expect_success $PREREQ 'Send patches with --envelope-sender' '
 103    clean_fake_sendmail &&
 104     git send-email --envelope-sender="Patch Contributer <patch@example.com>" --suppress-cc=sob --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
 105'
 106
 107test_expect_success $PREREQ 'setup expect' '
 108cat >expected <<\EOF
 109!patch@example.com!
 110!-i!
 111!nobody@example.com!
 112!author@example.com!
 113!one@example.com!
 114!two@example.com!
 115EOF
 116'
 117
 118test_expect_success $PREREQ \
 119    'Verify commandline' \
 120    'test_cmp expected commandline1'
 121
 122test_expect_success $PREREQ 'Send patches with --envelope-sender=auto' '
 123    clean_fake_sendmail &&
 124     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
 125'
 126
 127test_expect_success $PREREQ 'setup expect' '
 128cat >expected <<\EOF
 129!nobody@example.com!
 130!-i!
 131!nobody@example.com!
 132!author@example.com!
 133!one@example.com!
 134!two@example.com!
 135EOF
 136'
 137
 138test_expect_success $PREREQ \
 139    'Verify commandline' \
 140    'test_cmp expected commandline1'
 141
 142test_expect_success $PREREQ 'setup expect' "
 143cat >expected-show-all-headers <<\EOF
 1440001-Second.patch
 145(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 146(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 147(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 148Dry-OK. Log says:
 149Server: relay.example.com
 150MAIL FROM:<from@example.com>
 151RCPT TO:<to@example.com>
 152RCPT TO:<cc@example.com>
 153RCPT TO:<author@example.com>
 154RCPT TO:<one@example.com>
 155RCPT TO:<two@example.com>
 156RCPT TO:<bcc@example.com>
 157From: Example <from@example.com>
 158To: to@example.com
 159Cc: cc@example.com,
 160        A <author@example.com>,
 161        One <one@example.com>,
 162        two@example.com
 163Subject: [PATCH 1/1] Second.
 164Date: DATE-STRING
 165Message-Id: MESSAGE-ID-STRING
 166X-Mailer: X-MAILER-STRING
 167In-Reply-To: <unique-message-id@example.com>
 168References: <unique-message-id@example.com>
 169
 170Result: OK
 171EOF
 172"
 173
 174test_expect_success $PREREQ 'Show all headers' '
 175        git send-email \
 176                --dry-run \
 177                --suppress-cc=sob \
 178                --from="Example <from@example.com>" \
 179                --to=to@example.com \
 180                --cc=cc@example.com \
 181                --bcc=bcc@example.com \
 182                --in-reply-to="<unique-message-id@example.com>" \
 183                --smtp-server relay.example.com \
 184                $patches |
 185        sed     -e "s/^\(Date:\).*/\1 DATE-STRING/" \
 186                -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
 187                -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
 188                >actual-show-all-headers &&
 189        test_cmp expected-show-all-headers actual-show-all-headers
 190'
 191
 192test_expect_success $PREREQ 'Prompting works' '
 193        clean_fake_sendmail &&
 194        (echo "Example <from@example.com>"
 195         echo "to@example.com"
 196         echo ""
 197        ) | GIT_SEND_EMAIL_NOTTY=1 git send-email \
 198                --smtp-server="$(pwd)/fake.sendmail" \
 199                $patches \
 200                2>errors &&
 201                grep "^From: Example <from@example.com>\$" msgtxt1 &&
 202                grep "^To: to@example.com\$" msgtxt1
 203'
 204
 205test_expect_success $PREREQ 'tocmd works' '
 206        clean_fake_sendmail &&
 207        cp $patches tocmd.patch &&
 208        echo tocmd--tocmd@example.com >>tocmd.patch &&
 209        {
 210          echo "#!$SHELL_PATH"
 211          echo sed -n -e s/^tocmd--//p \"\$1\"
 212        } > tocmd-sed &&
 213        chmod +x tocmd-sed &&
 214        git send-email \
 215                --from="Example <nobody@example.com>" \
 216                --to-cmd=./tocmd-sed \
 217                --smtp-server="$(pwd)/fake.sendmail" \
 218                tocmd.patch \
 219                &&
 220        grep "^To: tocmd@example.com" msgtxt1
 221'
 222
 223test_expect_success $PREREQ 'cccmd works' '
 224        clean_fake_sendmail &&
 225        cp $patches cccmd.patch &&
 226        echo "cccmd--  cccmd@example.com" >>cccmd.patch &&
 227        {
 228          echo "#!$SHELL_PATH"
 229          echo sed -n -e s/^cccmd--//p \"\$1\"
 230        } > cccmd-sed &&
 231        chmod +x cccmd-sed &&
 232        git send-email \
 233                --from="Example <nobody@example.com>" \
 234                --to=nobody@example.com \
 235                --cc-cmd=./cccmd-sed \
 236                --smtp-server="$(pwd)/fake.sendmail" \
 237                cccmd.patch \
 238                &&
 239        grep "^ cccmd@example.com" msgtxt1
 240'
 241
 242test_expect_success $PREREQ 'reject long lines' '
 243        z8=zzzzzzzz &&
 244        z64=$z8$z8$z8$z8$z8$z8$z8$z8 &&
 245        z512=$z64$z64$z64$z64$z64$z64$z64$z64 &&
 246        clean_fake_sendmail &&
 247        cp $patches longline.patch &&
 248        echo $z512$z512 >>longline.patch &&
 249        test_must_fail git send-email \
 250                --from="Example <nobody@example.com>" \
 251                --to=nobody@example.com \
 252                --smtp-server="$(pwd)/fake.sendmail" \
 253                $patches longline.patch \
 254                2>errors &&
 255        grep longline.patch errors
 256'
 257
 258test_expect_success $PREREQ 'no patch was sent' '
 259        ! test -e commandline1
 260'
 261
 262test_expect_success $PREREQ 'Author From: in message body' '
 263        clean_fake_sendmail &&
 264        git send-email \
 265                --from="Example <nobody@example.com>" \
 266                --to=nobody@example.com \
 267                --smtp-server="$(pwd)/fake.sendmail" \
 268                $patches &&
 269        sed "1,/^\$/d" < msgtxt1 > msgbody1 &&
 270        grep "From: A <author@example.com>" msgbody1
 271'
 272
 273test_expect_success $PREREQ 'Author From: not in message body' '
 274        clean_fake_sendmail &&
 275        git send-email \
 276                --from="A <author@example.com>" \
 277                --to=nobody@example.com \
 278                --smtp-server="$(pwd)/fake.sendmail" \
 279                $patches &&
 280        sed "1,/^\$/d" < msgtxt1 > msgbody1 &&
 281        ! grep "From: A <author@example.com>" msgbody1
 282'
 283
 284test_expect_success $PREREQ 'allow long lines with --no-validate' '
 285        git send-email \
 286                --from="Example <nobody@example.com>" \
 287                --to=nobody@example.com \
 288                --smtp-server="$(pwd)/fake.sendmail" \
 289                --novalidate \
 290                $patches longline.patch \
 291                2>errors
 292'
 293
 294test_expect_success $PREREQ 'Invalid In-Reply-To' '
 295        clean_fake_sendmail &&
 296        git send-email \
 297                --from="Example <nobody@example.com>" \
 298                --to=nobody@example.com \
 299                --in-reply-to=" " \
 300                --smtp-server="$(pwd)/fake.sendmail" \
 301                $patches \
 302                2>errors &&
 303        ! grep "^In-Reply-To: < *>" msgtxt1
 304'
 305
 306test_expect_success $PREREQ 'Valid In-Reply-To when prompting' '
 307        clean_fake_sendmail &&
 308        (echo "From Example <from@example.com>"
 309         echo "To Example <to@example.com>"
 310         echo ""
 311        ) | env GIT_SEND_EMAIL_NOTTY=1 git send-email \
 312                --smtp-server="$(pwd)/fake.sendmail" \
 313                $patches 2>errors &&
 314        ! grep "^In-Reply-To: < *>" msgtxt1
 315'
 316
 317test_expect_success $PREREQ 'In-Reply-To without --chain-reply-to' '
 318        clean_fake_sendmail &&
 319        echo "<unique-message-id@example.com>" >expect &&
 320        git send-email \
 321                --from="Example <nobody@example.com>" \
 322                --to=nobody@example.com \
 323                --nochain-reply-to \
 324                --in-reply-to="$(cat expect)" \
 325                --smtp-server="$(pwd)/fake.sendmail" \
 326                $patches $patches $patches \
 327                2>errors &&
 328        # The first message is a reply to --in-reply-to
 329        sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt1 >actual &&
 330        test_cmp expect actual &&
 331        # Second and subsequent messages are replies to the first one
 332        sed -n -e "s/^Message-Id: *\(.*\)/\1/p" msgtxt1 >expect &&
 333        sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt2 >actual &&
 334        test_cmp expect actual &&
 335        sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt3 >actual &&
 336        test_cmp expect actual
 337'
 338
 339test_expect_success $PREREQ 'In-Reply-To with --chain-reply-to' '
 340        clean_fake_sendmail &&
 341        echo "<unique-message-id@example.com>" >expect &&
 342        git send-email \
 343                --from="Example <nobody@example.com>" \
 344                --to=nobody@example.com \
 345                --chain-reply-to \
 346                --in-reply-to="$(cat expect)" \
 347                --smtp-server="$(pwd)/fake.sendmail" \
 348                $patches $patches $patches \
 349                2>errors &&
 350        sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt1 >actual &&
 351        test_cmp expect actual &&
 352        sed -n -e "s/^Message-Id: *\(.*\)/\1/p" msgtxt1 >expect &&
 353        sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt2 >actual &&
 354        test_cmp expect actual &&
 355        sed -n -e "s/^Message-Id: *\(.*\)/\1/p" msgtxt2 >expect &&
 356        sed -n -e "s/^In-Reply-To: *\(.*\)/\1/p" msgtxt3 >actual &&
 357        test_cmp expect actual
 358'
 359
 360test_expect_success $PREREQ 'setup fake editor' '
 361        (echo "#!$SHELL_PATH" &&
 362         echo "echo fake edit >>\"\$1\""
 363        ) >fake-editor &&
 364        chmod +x fake-editor
 365'
 366
 367test_set_editor "$(pwd)/fake-editor"
 368
 369test_expect_success $PREREQ '--compose works' '
 370        clean_fake_sendmail &&
 371        git send-email \
 372        --compose --subject foo \
 373        --from="Example <nobody@example.com>" \
 374        --to=nobody@example.com \
 375        --smtp-server="$(pwd)/fake.sendmail" \
 376        $patches \
 377        2>errors
 378'
 379
 380test_expect_success $PREREQ 'first message is compose text' '
 381        grep "^fake edit" msgtxt1
 382'
 383
 384test_expect_success $PREREQ 'second message is patch' '
 385        grep "Subject:.*Second" msgtxt2
 386'
 387
 388test_expect_success $PREREQ 'setup expect' "
 389cat >expected-suppress-sob <<\EOF
 3900001-Second.patch
 391(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 392(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 393(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 394Dry-OK. Log says:
 395Server: relay.example.com
 396MAIL FROM:<from@example.com>
 397RCPT TO:<to@example.com>
 398RCPT TO:<cc@example.com>
 399RCPT TO:<author@example.com>
 400RCPT TO:<one@example.com>
 401RCPT TO:<two@example.com>
 402From: Example <from@example.com>
 403To: to@example.com
 404Cc: cc@example.com,
 405        A <author@example.com>,
 406        One <one@example.com>,
 407        two@example.com
 408Subject: [PATCH 1/1] Second.
 409Date: DATE-STRING
 410Message-Id: MESSAGE-ID-STRING
 411X-Mailer: X-MAILER-STRING
 412
 413Result: OK
 414EOF
 415"
 416
 417test_suppression () {
 418        git send-email \
 419                --dry-run \
 420                --suppress-cc=$1 ${2+"--suppress-cc=$2"} \
 421                --from="Example <from@example.com>" \
 422                --to=to@example.com \
 423                --smtp-server relay.example.com \
 424                $patches |
 425        sed     -e "s/^\(Date:\).*/\1 DATE-STRING/" \
 426                -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
 427                -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
 428                >actual-suppress-$1${2+"-$2"} &&
 429        test_cmp expected-suppress-$1${2+"-$2"} actual-suppress-$1${2+"-$2"}
 430}
 431
 432test_expect_success $PREREQ 'sendemail.cc set' '
 433        git config sendemail.cc cc@example.com &&
 434        test_suppression sob
 435'
 436
 437test_expect_success $PREREQ 'setup expect' "
 438cat >expected-suppress-sob <<\EOF
 4390001-Second.patch
 440(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 441(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 442(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 443Dry-OK. Log says:
 444Server: relay.example.com
 445MAIL FROM:<from@example.com>
 446RCPT TO:<to@example.com>
 447RCPT TO:<author@example.com>
 448RCPT TO:<one@example.com>
 449RCPT TO:<two@example.com>
 450From: Example <from@example.com>
 451To: to@example.com
 452Cc: A <author@example.com>,
 453        One <one@example.com>,
 454        two@example.com
 455Subject: [PATCH 1/1] Second.
 456Date: DATE-STRING
 457Message-Id: MESSAGE-ID-STRING
 458X-Mailer: X-MAILER-STRING
 459
 460Result: OK
 461EOF
 462"
 463
 464test_expect_success $PREREQ 'sendemail.cc unset' '
 465        git config --unset sendemail.cc &&
 466        test_suppression sob
 467'
 468
 469test_expect_success $PREREQ 'setup expect' "
 470cat >expected-suppress-cccmd <<\EOF
 4710001-Second.patch
 472(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 473(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 474(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 475(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
 476Dry-OK. Log says:
 477Server: relay.example.com
 478MAIL FROM:<from@example.com>
 479RCPT TO:<to@example.com>
 480RCPT TO:<author@example.com>
 481RCPT TO:<one@example.com>
 482RCPT TO:<two@example.com>
 483RCPT TO:<committer@example.com>
 484From: Example <from@example.com>
 485To: to@example.com
 486Cc: A <author@example.com>,
 487        One <one@example.com>,
 488        two@example.com,
 489        C O Mitter <committer@example.com>
 490Subject: [PATCH 1/1] Second.
 491Date: DATE-STRING
 492Message-Id: MESSAGE-ID-STRING
 493X-Mailer: X-MAILER-STRING
 494
 495Result: OK
 496EOF
 497"
 498
 499test_expect_success $PREREQ 'sendemail.cccmd' '
 500        echo echo cc-cmd@example.com > cccmd &&
 501        chmod +x cccmd &&
 502        git config sendemail.cccmd ./cccmd &&
 503        test_suppression cccmd
 504'
 505
 506test_expect_success $PREREQ 'setup expect' '
 507cat >expected-suppress-all <<\EOF
 5080001-Second.patch
 509Dry-OK. Log says:
 510Server: relay.example.com
 511MAIL FROM:<from@example.com>
 512RCPT TO:<to@example.com>
 513From: Example <from@example.com>
 514To: to@example.com
 515Subject: [PATCH 1/1] Second.
 516Date: DATE-STRING
 517Message-Id: MESSAGE-ID-STRING
 518X-Mailer: X-MAILER-STRING
 519
 520Result: OK
 521EOF
 522'
 523
 524test_expect_success $PREREQ '--suppress-cc=all' '
 525        test_suppression all
 526'
 527
 528test_expect_success $PREREQ 'setup expect' "
 529cat >expected-suppress-body <<\EOF
 5300001-Second.patch
 531(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 532(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 533(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 534(cc-cmd) Adding cc: cc-cmd@example.com from: './cccmd'
 535Dry-OK. Log says:
 536Server: relay.example.com
 537MAIL FROM:<from@example.com>
 538RCPT TO:<to@example.com>
 539RCPT TO:<author@example.com>
 540RCPT TO:<one@example.com>
 541RCPT TO:<two@example.com>
 542RCPT TO:<cc-cmd@example.com>
 543From: Example <from@example.com>
 544To: to@example.com
 545Cc: A <author@example.com>,
 546        One <one@example.com>,
 547        two@example.com,
 548        cc-cmd@example.com
 549Subject: [PATCH 1/1] Second.
 550Date: DATE-STRING
 551Message-Id: MESSAGE-ID-STRING
 552X-Mailer: X-MAILER-STRING
 553
 554Result: OK
 555EOF
 556"
 557
 558test_expect_success $PREREQ '--suppress-cc=body' '
 559        test_suppression body
 560'
 561
 562test_expect_success $PREREQ 'setup expect' "
 563cat >expected-suppress-body-cccmd <<\EOF
 5640001-Second.patch
 565(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 566(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 567(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 568Dry-OK. Log says:
 569Server: relay.example.com
 570MAIL FROM:<from@example.com>
 571RCPT TO:<to@example.com>
 572RCPT TO:<author@example.com>
 573RCPT TO:<one@example.com>
 574RCPT TO:<two@example.com>
 575From: Example <from@example.com>
 576To: to@example.com
 577Cc: A <author@example.com>,
 578        One <one@example.com>,
 579        two@example.com
 580Subject: [PATCH 1/1] Second.
 581Date: DATE-STRING
 582Message-Id: MESSAGE-ID-STRING
 583X-Mailer: X-MAILER-STRING
 584
 585Result: OK
 586EOF
 587"
 588
 589test_expect_success $PREREQ '--suppress-cc=body --suppress-cc=cccmd' '
 590        test_suppression body cccmd
 591'
 592
 593test_expect_success $PREREQ 'setup expect' "
 594cat >expected-suppress-sob <<\EOF
 5950001-Second.patch
 596(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 597(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 598(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 599Dry-OK. Log says:
 600Server: relay.example.com
 601MAIL FROM:<from@example.com>
 602RCPT TO:<to@example.com>
 603RCPT TO:<author@example.com>
 604RCPT TO:<one@example.com>
 605RCPT TO:<two@example.com>
 606From: Example <from@example.com>
 607To: to@example.com
 608Cc: A <author@example.com>,
 609        One <one@example.com>,
 610        two@example.com
 611Subject: [PATCH 1/1] Second.
 612Date: DATE-STRING
 613Message-Id: MESSAGE-ID-STRING
 614X-Mailer: X-MAILER-STRING
 615
 616Result: OK
 617EOF
 618"
 619
 620test_expect_success $PREREQ '--suppress-cc=sob' '
 621        test_might_fail git config --unset sendemail.cccmd &&
 622        test_suppression sob
 623'
 624
 625test_expect_success $PREREQ 'setup expect' "
 626cat >expected-suppress-bodycc <<\EOF
 6270001-Second.patch
 628(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 629(mbox) Adding cc: One <one@example.com> from line 'Cc: One <one@example.com>, two@example.com'
 630(mbox) Adding cc: two@example.com from line 'Cc: One <one@example.com>, two@example.com'
 631(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
 632Dry-OK. Log says:
 633Server: relay.example.com
 634MAIL FROM:<from@example.com>
 635RCPT TO:<to@example.com>
 636RCPT TO:<author@example.com>
 637RCPT TO:<one@example.com>
 638RCPT TO:<two@example.com>
 639RCPT TO:<committer@example.com>
 640From: Example <from@example.com>
 641To: to@example.com
 642Cc: A <author@example.com>,
 643        One <one@example.com>,
 644        two@example.com,
 645        C O Mitter <committer@example.com>
 646Subject: [PATCH 1/1] Second.
 647Date: DATE-STRING
 648Message-Id: MESSAGE-ID-STRING
 649X-Mailer: X-MAILER-STRING
 650
 651Result: OK
 652EOF
 653"
 654
 655test_expect_success $PREREQ '--suppress-cc=bodycc' '
 656        test_suppression bodycc
 657'
 658
 659test_expect_success $PREREQ 'setup expect' "
 660cat >expected-suppress-cc <<\EOF
 6610001-Second.patch
 662(mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
 663(body) Adding cc: C O Mitter <committer@example.com> from line 'Signed-off-by: C O Mitter <committer@example.com>'
 664Dry-OK. Log says:
 665Server: relay.example.com
 666MAIL FROM:<from@example.com>
 667RCPT TO:<to@example.com>
 668RCPT TO:<author@example.com>
 669RCPT TO:<committer@example.com>
 670From: Example <from@example.com>
 671To: to@example.com
 672Cc: A <author@example.com>,
 673        C O Mitter <committer@example.com>
 674Subject: [PATCH 1/1] Second.
 675Date: DATE-STRING
 676Message-Id: MESSAGE-ID-STRING
 677X-Mailer: X-MAILER-STRING
 678
 679Result: OK
 680EOF
 681"
 682
 683test_expect_success $PREREQ '--suppress-cc=cc' '
 684        test_suppression cc
 685'
 686
 687test_confirm () {
 688        echo y | \
 689                GIT_SEND_EMAIL_NOTTY=1 \
 690                git send-email \
 691                --from="Example <nobody@example.com>" \
 692                --to=nobody@example.com \
 693                --smtp-server="$(pwd)/fake.sendmail" \
 694                $@ $patches > stdout &&
 695        grep "Send this email" stdout
 696}
 697
 698test_expect_success $PREREQ '--confirm=always' '
 699        test_confirm --confirm=always --suppress-cc=all
 700'
 701
 702test_expect_success $PREREQ '--confirm=auto' '
 703        test_confirm --confirm=auto
 704'
 705
 706test_expect_success $PREREQ '--confirm=cc' '
 707        test_confirm --confirm=cc
 708'
 709
 710test_expect_success $PREREQ '--confirm=compose' '
 711        test_confirm --confirm=compose --compose
 712'
 713
 714test_expect_success $PREREQ 'confirm by default (due to cc)' '
 715        CONFIRM=$(git config --get sendemail.confirm) &&
 716        git config --unset sendemail.confirm &&
 717        test_confirm
 718        ret="$?"
 719        git config sendemail.confirm ${CONFIRM:-never}
 720        test $ret = "0"
 721'
 722
 723test_expect_success $PREREQ 'confirm by default (due to --compose)' '
 724        CONFIRM=$(git config --get sendemail.confirm) &&
 725        git config --unset sendemail.confirm &&
 726        test_confirm --suppress-cc=all --compose
 727        ret="$?"
 728        git config sendemail.confirm ${CONFIRM:-never}
 729        test $ret = "0"
 730'
 731
 732test_expect_success $PREREQ 'confirm detects EOF (inform assumes y)' '
 733        CONFIRM=$(git config --get sendemail.confirm) &&
 734        git config --unset sendemail.confirm &&
 735        rm -fr outdir &&
 736        git format-patch -2 -o outdir &&
 737        GIT_SEND_EMAIL_NOTTY=1 \
 738                git send-email \
 739                        --from="Example <nobody@example.com>" \
 740                        --to=nobody@example.com \
 741                        --smtp-server="$(pwd)/fake.sendmail" \
 742                        outdir/*.patch < /dev/null
 743        ret="$?"
 744        git config sendemail.confirm ${CONFIRM:-never}
 745        test $ret = "0"
 746'
 747
 748test_expect_success $PREREQ 'confirm detects EOF (auto causes failure)' '
 749        CONFIRM=$(git config --get sendemail.confirm) &&
 750        git config sendemail.confirm auto &&
 751        GIT_SEND_EMAIL_NOTTY=1 &&
 752        export GIT_SEND_EMAIL_NOTTY &&
 753                test_must_fail git send-email \
 754                        --from="Example <nobody@example.com>" \
 755                        --to=nobody@example.com \
 756                        --smtp-server="$(pwd)/fake.sendmail" \
 757                        $patches < /dev/null
 758        ret="$?"
 759        git config sendemail.confirm ${CONFIRM:-never}
 760        test $ret = "0"
 761'
 762
 763test_expect_success $PREREQ 'confirm doesnt loop forever' '
 764        CONFIRM=$(git config --get sendemail.confirm) &&
 765        git config sendemail.confirm auto &&
 766        GIT_SEND_EMAIL_NOTTY=1 &&
 767        export GIT_SEND_EMAIL_NOTTY &&
 768                yes "bogus" | test_must_fail git send-email \
 769                        --from="Example <nobody@example.com>" \
 770                        --to=nobody@example.com \
 771                        --smtp-server="$(pwd)/fake.sendmail" \
 772                        $patches
 773        ret="$?"
 774        git config sendemail.confirm ${CONFIRM:-never}
 775        test $ret = "0"
 776'
 777
 778test_expect_success $PREREQ 'utf8 Cc is rfc2047 encoded' '
 779        clean_fake_sendmail &&
 780        rm -fr outdir &&
 781        git format-patch -1 -o outdir --cc="àéìöú <utf8@example.com>" &&
 782        git send-email \
 783        --from="Example <nobody@example.com>" \
 784        --to=nobody@example.com \
 785        --smtp-server="$(pwd)/fake.sendmail" \
 786        outdir/*.patch &&
 787        grep "^ " msgtxt1 |
 788        grep "=?UTF-8?q?=C3=A0=C3=A9=C3=AC=C3=B6=C3=BA?= <utf8@example.com>"
 789'
 790
 791test_expect_success $PREREQ '--compose adds MIME for utf8 body' '
 792        clean_fake_sendmail &&
 793        (echo "#!$SHELL_PATH" &&
 794         echo "echo utf8 body: àéìöú >>\"\$1\""
 795        ) >fake-editor-utf8 &&
 796        chmod +x fake-editor-utf8 &&
 797          GIT_EDITOR="\"$(pwd)/fake-editor-utf8\"" \
 798          git send-email \
 799          --compose --subject foo \
 800          --from="Example <nobody@example.com>" \
 801          --to=nobody@example.com \
 802          --smtp-server="$(pwd)/fake.sendmail" \
 803          $patches &&
 804        grep "^utf8 body" msgtxt1 &&
 805        grep "^Content-Type: text/plain; charset=UTF-8" msgtxt1
 806'
 807
 808test_expect_success $PREREQ '--compose respects user mime type' '
 809        clean_fake_sendmail &&
 810        (echo "#!$SHELL_PATH" &&
 811         echo "(echo MIME-Version: 1.0"
 812         echo " echo Content-Type: text/plain\\; charset=iso-8859-1"
 813         echo " echo Content-Transfer-Encoding: 8bit"
 814         echo " echo Subject: foo"
 815         echo " echo "
 816         echo " echo utf8 body: àéìöú) >\"\$1\""
 817        ) >fake-editor-utf8-mime &&
 818        chmod +x fake-editor-utf8-mime &&
 819          GIT_EDITOR="\"$(pwd)/fake-editor-utf8-mime\"" \
 820          git send-email \
 821          --compose --subject foo \
 822          --from="Example <nobody@example.com>" \
 823          --to=nobody@example.com \
 824          --smtp-server="$(pwd)/fake.sendmail" \
 825          $patches &&
 826        grep "^utf8 body" msgtxt1 &&
 827        grep "^Content-Type: text/plain; charset=iso-8859-1" msgtxt1 &&
 828        ! grep "^Content-Type: text/plain; charset=UTF-8" msgtxt1
 829'
 830
 831test_expect_success $PREREQ '--compose adds MIME for utf8 subject' '
 832        clean_fake_sendmail &&
 833          GIT_EDITOR="\"$(pwd)/fake-editor\"" \
 834          git send-email \
 835          --compose --subject utf8-sübjëct \
 836          --from="Example <nobody@example.com>" \
 837          --to=nobody@example.com \
 838          --smtp-server="$(pwd)/fake.sendmail" \
 839          $patches &&
 840        grep "^fake edit" msgtxt1 &&
 841        grep "^Subject: =?UTF-8?q?utf8-s=C3=BCbj=C3=ABct?=" msgtxt1
 842'
 843
 844test_expect_success $PREREQ 'utf8 author is correctly passed on' '
 845        clean_fake_sendmail &&
 846        test_commit weird_author &&
 847        test_when_finished "git reset --hard HEAD^" &&
 848        git commit --amend --author "Füñný Nâmé <odd_?=mail@example.com>" &&
 849        git format-patch --stdout -1 >funny_name.patch &&
 850        git send-email --from="Example <nobody@example.com>" \
 851          --to=nobody@example.com \
 852          --smtp-server="$(pwd)/fake.sendmail" \
 853          funny_name.patch &&
 854        grep "^From: Füñný Nâmé <odd_?=mail@example.com>" msgtxt1
 855'
 856
 857test_expect_success $PREREQ 'detects ambiguous reference/file conflict' '
 858        echo master > master &&
 859        git add master &&
 860        git commit -m"add master" &&
 861        test_must_fail git send-email --dry-run master 2>errors &&
 862        grep disambiguate errors
 863'
 864
 865test_expect_success $PREREQ 'feed two files' '
 866        rm -fr outdir &&
 867        git format-patch -2 -o outdir &&
 868        git send-email \
 869        --dry-run \
 870        --from="Example <nobody@example.com>" \
 871        --to=nobody@example.com \
 872        outdir/000?-*.patch 2>errors >out &&
 873        grep "^Subject: " out >subjects &&
 874        test "z$(sed -n -e 1p subjects)" = "zSubject: [PATCH 1/2] Second." &&
 875        test "z$(sed -n -e 2p subjects)" = "zSubject: [PATCH 2/2] add master"
 876'
 877
 878test_expect_success $PREREQ 'in-reply-to but no threading' '
 879        git send-email \
 880                --dry-run \
 881                --from="Example <nobody@example.com>" \
 882                --to=nobody@example.com \
 883                --in-reply-to="<in-reply-id@example.com>" \
 884                --nothread \
 885                $patches |
 886        grep "In-Reply-To: <in-reply-id@example.com>"
 887'
 888
 889test_expect_success $PREREQ 'no in-reply-to and no threading' '
 890        git send-email \
 891                --dry-run \
 892                --from="Example <nobody@example.com>" \
 893                --to=nobody@example.com \
 894                --nothread \
 895                $patches $patches >stdout &&
 896        ! grep "In-Reply-To: " stdout
 897'
 898
 899test_expect_success $PREREQ 'threading but no chain-reply-to' '
 900        git send-email \
 901                --dry-run \
 902                --from="Example <nobody@example.com>" \
 903                --to=nobody@example.com \
 904                --thread \
 905                --nochain-reply-to \
 906                $patches $patches >stdout &&
 907        grep "In-Reply-To: " stdout
 908'
 909
 910test_expect_success $PREREQ 'warning with an implicit --chain-reply-to' '
 911        git send-email \
 912        --dry-run \
 913        --from="Example <nobody@example.com>" \
 914        --to=nobody@example.com \
 915        outdir/000?-*.patch 2>errors >out &&
 916        grep "no-chain-reply-to" errors
 917'
 918
 919test_expect_success $PREREQ 'no warning with an explicit --chain-reply-to' '
 920        git send-email \
 921        --dry-run \
 922        --from="Example <nobody@example.com>" \
 923        --to=nobody@example.com \
 924        --chain-reply-to \
 925        outdir/000?-*.patch 2>errors >out &&
 926        ! grep "no-chain-reply-to" errors
 927'
 928
 929test_expect_success $PREREQ 'no warning with an explicit --no-chain-reply-to' '
 930        git send-email \
 931        --dry-run \
 932        --from="Example <nobody@example.com>" \
 933        --to=nobody@example.com \
 934        --nochain-reply-to \
 935        outdir/000?-*.patch 2>errors >out &&
 936        ! grep "no-chain-reply-to" errors
 937'
 938
 939test_expect_success $PREREQ 'no warning with sendemail.chainreplyto = false' '
 940        git config sendemail.chainreplyto false &&
 941        git send-email \
 942        --dry-run \
 943        --from="Example <nobody@example.com>" \
 944        --to=nobody@example.com \
 945        outdir/000?-*.patch 2>errors >out &&
 946        ! grep "no-chain-reply-to" errors
 947'
 948
 949test_expect_success $PREREQ 'no warning with sendemail.chainreplyto = true' '
 950        git config sendemail.chainreplyto true &&
 951        git send-email \
 952        --dry-run \
 953        --from="Example <nobody@example.com>" \
 954        --to=nobody@example.com \
 955        outdir/000?-*.patch 2>errors >out &&
 956        ! grep "no-chain-reply-to" errors
 957'
 958
 959test_expect_success $PREREQ 'sendemail.to works' '
 960        git config --replace-all sendemail.to "Somebody <somebody@ex.com>" &&
 961        git send-email \
 962                --dry-run \
 963                --from="Example <nobody@example.com>" \
 964                $patches $patches >stdout &&
 965        grep "To: Somebody <somebody@ex.com>" stdout
 966'
 967
 968test_expect_success $PREREQ '--no-to overrides sendemail.to' '
 969        git send-email \
 970                --dry-run \
 971                --from="Example <nobody@example.com>" \
 972                --no-to \
 973                --to=nobody@example.com \
 974                $patches $patches >stdout &&
 975        grep "To: nobody@example.com" stdout &&
 976        ! grep "To: Somebody <somebody@ex.com>" stdout
 977'
 978
 979test_expect_success $PREREQ 'sendemail.cc works' '
 980        git config --replace-all sendemail.cc "Somebody <somebody@ex.com>" &&
 981        git send-email \
 982                --dry-run \
 983                --from="Example <nobody@example.com>" \
 984                --to=nobody@example.com \
 985                $patches $patches >stdout &&
 986        grep "Cc: Somebody <somebody@ex.com>" stdout
 987'
 988
 989test_expect_success $PREREQ '--no-cc overrides sendemail.cc' '
 990        git send-email \
 991                --dry-run \
 992                --from="Example <nobody@example.com>" \
 993                --no-cc \
 994                --cc=bodies@example.com \
 995                --to=nobody@example.com \
 996                $patches $patches >stdout &&
 997        grep "Cc: bodies@example.com" stdout &&
 998        ! grep "Cc: Somebody <somebody@ex.com>" stdout
 999'
1000
1001test_expect_success $PREREQ 'sendemail.bcc works' '
1002        git config --replace-all sendemail.bcc "Other <other@ex.com>" &&
1003        git send-email \
1004                --dry-run \
1005                --from="Example <nobody@example.com>" \
1006                --to=nobody@example.com \
1007                --smtp-server relay.example.com \
1008                $patches $patches >stdout &&
1009        grep "RCPT TO:<other@ex.com>" stdout
1010'
1011
1012test_expect_success $PREREQ '--no-bcc overrides sendemail.bcc' '
1013        git send-email \
1014                --dry-run \
1015                --from="Example <nobody@example.com>" \
1016                --no-bcc \
1017                --bcc=bodies@example.com \
1018                --to=nobody@example.com \
1019                --smtp-server relay.example.com \
1020                $patches $patches >stdout &&
1021        grep "RCPT TO:<bodies@example.com>" stdout &&
1022        ! grep "RCPT TO:<other@ex.com>" stdout
1023'
1024
1025test_expect_success $PREREQ 'patches To headers are used by default' '
1026        patch=`git format-patch -1 --to="bodies@example.com"` &&
1027        test_when_finished "rm $patch" &&
1028        git send-email \
1029                --dry-run \
1030                --from="Example <nobody@example.com>" \
1031                --smtp-server relay.example.com \
1032                $patch >stdout &&
1033        grep "RCPT TO:<bodies@example.com>" stdout
1034'
1035
1036test_expect_success $PREREQ 'patches To headers are appended to' '
1037        patch=`git format-patch -1 --to="bodies@example.com"` &&
1038        test_when_finished "rm $patch" &&
1039        git send-email \
1040                --dry-run \
1041                --from="Example <nobody@example.com>" \
1042                --to=nobody@example.com \
1043                --smtp-server relay.example.com \
1044                $patch >stdout &&
1045        grep "RCPT TO:<bodies@example.com>" stdout &&
1046        grep "RCPT TO:<nobody@example.com>" stdout
1047'
1048
1049test_expect_success $PREREQ 'To headers from files reset each patch' '
1050        patch1=`git format-patch -1 --to="bodies@example.com"` &&
1051        patch2=`git format-patch -1 --to="other@example.com" HEAD~` &&
1052        test_when_finished "rm $patch1 && rm $patch2" &&
1053        git send-email \
1054                --dry-run \
1055                --from="Example <nobody@example.com>" \
1056                --to="nobody@example.com" \
1057                --smtp-server relay.example.com \
1058                $patch1 $patch2 >stdout &&
1059        test $(grep -c "RCPT TO:<bodies@example.com>" stdout) = 1 &&
1060        test $(grep -c "RCPT TO:<nobody@example.com>" stdout) = 2 &&
1061        test $(grep -c "RCPT TO:<other@example.com>" stdout) = 1
1062'
1063
1064test_expect_success $PREREQ 'setup expect' '
1065cat >email-using-8bit <<EOF
1066From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
1067Message-Id: <bogus-message-id@example.com>
1068From: author@example.com
1069Date: Sat, 12 Jun 2010 15:53:58 +0200
1070Subject: subject goes here
1071
1072Dieser deutsche Text enthält einen Umlaut!
1073EOF
1074'
1075
1076test_expect_success $PREREQ 'setup expect' '
1077cat >content-type-decl <<EOF
1078MIME-Version: 1.0
1079Content-Type: text/plain; charset=UTF-8
1080Content-Transfer-Encoding: 8bit
1081EOF
1082'
1083
1084test_expect_success $PREREQ 'asks about and fixes 8bit encodings' '
1085        clean_fake_sendmail &&
1086        echo |
1087        git send-email --from=author@example.com --to=nobody@example.com \
1088                        --smtp-server="$(pwd)/fake.sendmail" \
1089                        email-using-8bit >stdout &&
1090        grep "do not declare a Content-Transfer-Encoding" stdout &&
1091        grep email-using-8bit stdout &&
1092        grep "Which 8bit encoding" stdout &&
1093        egrep "Content|MIME" msgtxt1 >actual &&
1094        test_cmp actual content-type-decl
1095'
1096
1097test_expect_success $PREREQ 'sendemail.8bitEncoding works' '
1098        clean_fake_sendmail &&
1099        git config sendemail.assume8bitEncoding UTF-8 &&
1100        echo bogus |
1101        git send-email --from=author@example.com --to=nobody@example.com \
1102                        --smtp-server="$(pwd)/fake.sendmail" \
1103                        email-using-8bit >stdout &&
1104        egrep "Content|MIME" msgtxt1 >actual &&
1105        test_cmp actual content-type-decl
1106'
1107
1108test_expect_success $PREREQ '--8bit-encoding overrides sendemail.8bitEncoding' '
1109        clean_fake_sendmail &&
1110        git config sendemail.assume8bitEncoding "bogus too" &&
1111        echo bogus |
1112        git send-email --from=author@example.com --to=nobody@example.com \
1113                        --smtp-server="$(pwd)/fake.sendmail" \
1114                        --8bit-encoding=UTF-8 \
1115                        email-using-8bit >stdout &&
1116        egrep "Content|MIME" msgtxt1 >actual &&
1117        test_cmp actual content-type-decl
1118'
1119
1120test_expect_success $PREREQ 'setup expect' '
1121cat >email-using-8bit <<EOF
1122From fe6ecc66ece37198fe5db91fa2fc41d9f4fe5cc4 Mon Sep 17 00:00:00 2001
1123Message-Id: <bogus-message-id@example.com>
1124From: author@example.com
1125Date: Sat, 12 Jun 2010 15:53:58 +0200
1126Subject: Dieser Betreff enthält auch einen Umlaut!
1127
1128Nothing to see here.
1129EOF
1130'
1131
1132test_expect_success $PREREQ 'setup expect' '
1133cat >expected <<EOF
1134Subject: =?UTF-8?q?Dieser=20Betreff=20enth=C3=A4lt=20auch=20einen=20Umlaut!?=
1135EOF
1136'
1137
1138test_expect_success $PREREQ '--8bit-encoding also treats subject' '
1139        clean_fake_sendmail &&
1140        echo bogus |
1141        git send-email --from=author@example.com --to=nobody@example.com \
1142                        --smtp-server="$(pwd)/fake.sendmail" \
1143                        --8bit-encoding=UTF-8 \
1144                        email-using-8bit >stdout &&
1145        grep "Subject" msgtxt1 >actual &&
1146        test_cmp expected actual
1147'
1148
1149# Note that the patches in this test are deliberately out of order; we
1150# want to make sure it works even if the cover-letter is not in the
1151# first mail.
1152test_expect_success $PREREQ 'refusing to send cover letter template' '
1153        clean_fake_sendmail &&
1154        rm -fr outdir &&
1155        git format-patch --cover-letter -2 -o outdir &&
1156        test_must_fail git send-email \
1157          --from="Example <nobody@example.com>" \
1158          --to=nobody@example.com \
1159          --smtp-server="$(pwd)/fake.sendmail" \
1160          outdir/0002-*.patch \
1161          outdir/0000-*.patch \
1162          outdir/0001-*.patch \
1163          2>errors >out &&
1164        grep "SUBJECT HERE" errors &&
1165        test -z "$(ls msgtxt*)"
1166'
1167
1168test_expect_success $PREREQ '--force sends cover letter template anyway' '
1169        clean_fake_sendmail &&
1170        rm -fr outdir &&
1171        git format-patch --cover-letter -2 -o outdir &&
1172        git send-email \
1173          --force \
1174          --from="Example <nobody@example.com>" \
1175          --to=nobody@example.com \
1176          --smtp-server="$(pwd)/fake.sendmail" \
1177          outdir/0002-*.patch \
1178          outdir/0000-*.patch \
1179          outdir/0001-*.patch \
1180          2>errors >out &&
1181        ! grep "SUBJECT HERE" errors &&
1182        test -n "$(ls msgtxt*)"
1183'
1184
1185test_expect_success $PREREQ 'sendemail.aliasfiletype=mailrc' '
1186        clean_fake_sendmail &&
1187        echo "alias sbd  somebody@example.org" >.mailrc &&
1188        git config --replace-all sendemail.aliasesfile "$(pwd)/.mailrc" &&
1189        git config sendemail.aliasfiletype mailrc &&
1190        git send-email \
1191          --from="Example <nobody@example.com>" \
1192          --to=sbd \
1193          --smtp-server="$(pwd)/fake.sendmail" \
1194          outdir/0001-*.patch \
1195          2>errors >out &&
1196        grep "^!somebody@example\.org!$" commandline1
1197'
1198
1199test_expect_success $PREREQ 'sendemail.aliasfile=~/.mailrc' '
1200        clean_fake_sendmail &&
1201        echo "alias sbd  someone@example.org" >~/.mailrc &&
1202        git config --replace-all sendemail.aliasesfile "~/.mailrc" &&
1203        git config sendemail.aliasfiletype mailrc &&
1204        git send-email \
1205          --from="Example <nobody@example.com>" \
1206          --to=sbd \
1207          --smtp-server="$(pwd)/fake.sendmail" \
1208          outdir/0001-*.patch \
1209          2>errors >out &&
1210        grep "^!someone@example\.org!$" commandline1
1211'
1212
1213test_done