bash: use __gitdir when completing 'git rebase' options
[git] / t / t9001-send-email.sh
1 #!/bin/sh
2
3 test_description='git-send-email'
4 . ./test-lib.sh
5
6 PROG='git send-email'
7 test_expect_success \
8     'prepare reference tree' \
9     'echo "1A quick brown fox jumps over the" >file &&
10      echo "lazy dog" >>file &&
11      git add file &&
12      GIT_AUTHOR_NAME="A" git commit -a -m "Initial."'
13
14 test_expect_success \
15     'Setup helper tool' \
16     '(echo "#!/bin/sh"
17       echo shift
18       echo output=1
19       echo "while test -f commandline\$output; do output=\$((\$output+1)); done"
20       echo for a
21       echo do
22       echo "  echo \"!\$a!\""
23       echo "done >commandline\$output"
24       echo "cat > msgtxt\$output"
25       ) >fake.sendmail &&
26      chmod +x ./fake.sendmail &&
27      git add fake.sendmail &&
28      GIT_AUTHOR_NAME="A" git commit -a -m "Second."'
29
30 clean_fake_sendmail() {
31         rm -f commandline* msgtxt*
32 }
33
34 test_expect_success 'Extract patches' '
35     patches=`git format-patch -n HEAD^1`
36 '
37
38 test_expect_success 'Send patches' '
39      git send-email --from="Example <nobody@example.com>" --to=nobody@example.com --smtp-server="$(pwd)/fake.sendmail" $patches 2>errors
40 '
41
42 cat >expected <<\EOF
43 !nobody@example.com!
44 !author@example.com!
45 EOF
46 test_expect_success \
47     'Verify commandline' \
48     'diff commandline1 expected'
49
50 cat >expected-show-all-headers <<\EOF
51 0001-Second.patch
52 (mbox) Adding cc: A <author@example.com> from line 'From: A <author@example.com>'
53 Dry-OK. Log says:
54 Server: relay.example.com
55 MAIL FROM:<from@example.com>
56 RCPT TO:<to@example.com>,<cc@example.com>,<author@example.com>,<bcc@example.com>
57 From: Example <from@example.com>
58 To: to@example.com
59 Cc: cc@example.com, A <author@example.com>
60 Subject: [PATCH 1/1] Second.
61 Date: DATE-STRING
62 Message-Id: MESSAGE-ID-STRING
63 X-Mailer: X-MAILER-STRING
64 In-Reply-To: <unique-message-id@example.com>
65 References: <unique-message-id@example.com>
66
67 Result: OK
68 EOF
69
70 test_expect_success 'Show all headers' '
71         git send-email \
72                 --dry-run \
73                 --from="Example <from@example.com>" \
74                 --to=to@example.com \
75                 --cc=cc@example.com \
76                 --bcc=bcc@example.com \
77                 --in-reply-to="<unique-message-id@example.com>" \
78                 --smtp-server relay.example.com \
79                 $patches |
80         sed     -e "s/^\(Date:\).*/\1 DATE-STRING/" \
81                 -e "s/^\(Message-Id:\).*/\1 MESSAGE-ID-STRING/" \
82                 -e "s/^\(X-Mailer:\).*/\1 X-MAILER-STRING/" \
83                 >actual-show-all-headers &&
84         diff -u expected-show-all-headers actual-show-all-headers
85 '
86
87 z8=zzzzzzzz
88 z64=$z8$z8$z8$z8$z8$z8$z8$z8
89 z512=$z64$z64$z64$z64$z64$z64$z64$z64
90 test_expect_success 'reject long lines' '
91         clean_fake_sendmail &&
92         cp $patches longline.patch &&
93         echo $z512$z512 >>longline.patch &&
94         ! git send-email \
95                 --from="Example <nobody@example.com>" \
96                 --to=nobody@example.com \
97                 --smtp-server="$(pwd)/fake.sendmail" \
98                 $patches longline.patch \
99                 2>errors &&
100         grep longline.patch errors
101 '
102
103 test_expect_success 'no patch was sent' '
104         ! test -e commandline1
105 '
106
107 test_expect_success 'allow long lines with --no-validate' '
108         git send-email \
109                 --from="Example <nobody@example.com>" \
110                 --to=nobody@example.com \
111                 --smtp-server="$(pwd)/fake.sendmail" \
112                 --no-validate \
113                 $patches longline.patch \
114                 2>errors
115 '
116
117 test_expect_success 'Invalid In-Reply-To' '
118         clean_fake_sendmail &&
119         git send-email \
120                 --from="Example <nobody@example.com>" \
121                 --to=nobody@example.com \
122                 --in-reply-to=" " \
123                 --smtp-server="$(pwd)/fake.sendmail" \
124                 $patches
125                 2>errors
126         ! grep "^In-Reply-To: < *>" msgtxt1
127 '
128
129 test_expect_success 'Valid In-Reply-To when prompting' '
130         clean_fake_sendmail &&
131         (echo "From Example <from@example.com>"
132          echo "To Example <to@example.com>"
133          echo ""
134         ) | env GIT_SEND_EMAIL_NOTTY=1 git send-email \
135                 --smtp-server="$(pwd)/fake.sendmail" \
136                 $patches 2>errors &&
137         ! grep "^In-Reply-To: < *>" msgtxt1
138 '
139
140 test_expect_success 'setup fake editor' '
141         (echo "#!/bin/sh" &&
142          echo "echo fake edit >>\$1"
143         ) >fake-editor &&
144         chmod +x fake-editor
145 '
146
147 test_expect_success '--compose works' '
148         clean_fake_sendmail &&
149         echo y | \
150                 GIT_EDITOR=$(pwd)/fake-editor \
151                 GIT_SEND_EMAIL_NOTTY=1 \
152                 git send-email \
153                 --compose --subject foo \
154                 --from="Example <nobody@example.com>" \
155                 --to=nobody@example.com \
156                 --smtp-server="$(pwd)/fake.sendmail" \
157                 $patches \
158                 2>errors
159 '
160
161 test_expect_success 'first message is compose text' '
162         grep "^fake edit" msgtxt1
163 '
164
165 test_expect_success 'second message is patch' '
166         grep "Subject:.*Second" msgtxt2
167 '
168
169 test_done