#!/bin/sh test_description='git-send-email' . ./test-lib.sh PROG='git send-email' test_expect_success \ 'prepare reference tree' \ 'echo "1A quick brown fox jumps over the" >file && echo "lazy dog" >>file && git add file && GIT_AUTHOR_NAME="A" git commit -a -m "Initial."' test_expect_success \ 'Setup helper tool' \ '(echo "#!/bin/sh" echo shift echo output=1 echo "while test -f commandline\$output; do output=\$((\$output+1)); done" echo for a echo do echo " echo \"!\$a!\"" echo "done >commandline\$output" echo "cat > msgtxt\$output" ) >fake.sendmail && chmod +x ./fake.sendmail && git add fake.sendmail && GIT_AUTHOR_NAME="A" git commit -a -m "Second."' clean_fake_sendmail() { rm -f commandline* msgtxt* } test_expect_success 'Extract patches' ' patches=`git format-patch -n HEAD^1` ' test_expect_success 'Send patches' ' git send-email --from="Example " --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors ' cat >expected <<\EOF !nobody@example.com! !author@example.com! EOF test_expect_success \ 'Verify commandline' \ 'diff commandline1 expected' cat >expected-show-all-headers <<\EOF 0001-Second.patch (mbox) Adding cc: A from line 'From: A ' Dry-OK. Log says: Server: relay.example.com MAIL FROM: RCPT TO:,,, From: Example To: to@example.com Cc: cc@example.com, A Subject: [PATCH 1/1] Second. Date: DATE-STRING Message-Id: MESSAGE-ID-STRING X-Mailer: X-MAILER-STRING In-Reply-To: References: Result: OK EOF test_expect_success 'Show all headers' ' git send-email \ --dry-run \ --from="Example " \ --to=to@example.com \ --cc=cc@example.com \ --bcc=bcc@example.com \ --in-reply-to="" \ --smtp-server relay.example.com \ $patches | sed -e "s/^\(Date:\).*/\1 DATE-STRING/" \ -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \ -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \ >actual-show-all-headers && test_cmp expected-show-all-headers actual-show-all-headers ' z8=zzzzzzzz z64=$z8$z8$z8$z8$z8$z8$z8$z8 z512=$z64$z64$z64$z64$z64$z64$z64$z64 test_expect_success 'reject long lines' ' clean_fake_sendmail && cp $patches longline.patch && echo $z512$z512 >>longline.patch && ! git send-email \ --from="Example " \ --to=nobody@example.com \ --smtp-server="$(pwd)/fake.sendmail" \ $patches longline.patch \ 2>errors && grep longline.patch errors ' test_expect_success 'no patch was sent' ' ! test -e commandline1 ' test_expect_success 'allow long lines with --no-validate' ' git send-email \ --from="Example " \ --to=nobody@example.com \ --smtp-server="$(pwd)/fake.sendmail" \ --no-validate \ $patches longline.patch \ 2>errors ' test_expect_success 'Invalid In-Reply-To' ' clean_fake_sendmail && git send-email \ --from="Example " \ --to=nobody@example.com \ --in-reply-to=" " \ --smtp-server="$(pwd)/fake.sendmail" \ $patches 2>errors ! grep "^In-Reply-To: < *>" msgtxt1 ' test_expect_success 'Valid In-Reply-To when prompting' ' clean_fake_sendmail && (echo "From Example " echo "To Example " echo "" ) | env GIT_SEND_EMAIL_NOTTY=1 git send-email \ --smtp-server="$(pwd)/fake.sendmail" \ $patches 2>errors && ! grep "^In-Reply-To: < *>" msgtxt1 ' test_expect_success 'setup fake editor' ' (echo "#!/bin/sh" && echo "echo fake edit >>\$1" ) >fake-editor && chmod +x fake-editor ' test_expect_success '--compose works' ' clean_fake_sendmail && echo y | \ GIT_EDITOR=$(pwd)/fake-editor \ GIT_SEND_EMAIL_NOTTY=1 \ git send-email \ --compose --subject foo \ --from="Example " \ --to=nobody@example.com \ --smtp-server="$(pwd)/fake.sendmail" \ $patches \ 2>errors ' test_expect_success 'first message is compose text' ' grep "^fake edit" msgtxt1 ' test_expect_success 'second message is patch' ' grep "Subject:.*Second" msgtxt2 ' cat >expected-show-all-headers <<\EOF 0001-Second.patch (mbox) Adding cc: A from line 'From: A ' Dry-OK. Log says: Server: relay.example.com MAIL FROM: RCPT TO:,, From: Example To: to@example.com Cc: cc@example.com, A Subject: [PATCH 1/1] Second. Date: DATE-STRING Message-Id: MESSAGE-ID-STRING X-Mailer: X-MAILER-STRING Result: OK EOF test_expect_success 'sendemail.cc set' ' git config sendemail.cc cc@example.com && git send-email \ --dry-run \ --from="Example " \ --to=to@example.com \ --smtp-server relay.example.com \ $patches | sed -e "s/^\(Date:\).*/\1 DATE-STRING/" \ -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \ -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \ >actual-show-all-headers && test_cmp expected-show-all-headers actual-show-all-headers ' cat >expected-show-all-headers <<\EOF 0001-Second.patch (mbox) Adding cc: A from line 'From: A ' Dry-OK. Log says: Server: relay.example.com MAIL FROM: RCPT TO:, From: Example To: to@example.com Cc: A Subject: [PATCH 1/1] Second. Date: DATE-STRING Message-Id: MESSAGE-ID-STRING X-Mailer: X-MAILER-STRING Result: OK EOF test_expect_success 'sendemail.cc unset' ' git config --unset sendemail.cc && git send-email \ --dry-run \ --from="Example " \ --to=to@example.com \ --smtp-server relay.example.com \ $patches | sed -e "s/^\(Date:\).*/\1 DATE-STRING/" \ -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \ -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \ >actual-show-all-headers && test_cmp expected-show-all-headers actual-show-all-headers ' test_done