##// END OF EJS Templates
patchbomb: with --in-reply-to, still thread message under first in series...
Cédric Duval -
r8514:25223262 default
parent child Browse files
Show More
@@ -1,502 +1,505 b''
1 # patchbomb.py - sending Mercurial changesets as patch emails
1 # patchbomb.py - sending Mercurial changesets as patch emails
2 #
2 #
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2, incorporated herein by reference.
6 # GNU General Public License version 2, incorporated herein by reference.
7
7
8 '''sending Mercurial changesets as a series of patch emails
8 '''sending Mercurial changesets as a series of patch emails
9
9
10 The series is started off with a "[PATCH 0 of N]" introduction, which
10 The series is started off with a "[PATCH 0 of N]" introduction, which
11 describes the series as a whole.
11 describes the series as a whole.
12
12
13 Each patch email has a Subject line of "[PATCH M of N] ...", using the
13 Each patch email has a Subject line of "[PATCH M of N] ...", using the
14 first line of the changeset description as the subject text. The
14 first line of the changeset description as the subject text. The
15 message contains two or three body parts:
15 message contains two or three body parts:
16
16
17 The changeset description.
17 The changeset description.
18
18
19 [Optional] The result of running diffstat on the patch.
19 [Optional] The result of running diffstat on the patch.
20
20
21 The patch itself, as generated by "hg export".
21 The patch itself, as generated by "hg export".
22
22
23 Each message refers to the first in the series using the In-Reply-To
23 Each message refers to the first in the series using the In-Reply-To
24 and References headers, so they will show up as a sequence in threaded
24 and References headers, so they will show up as a sequence in threaded
25 mail and news readers, and in mail archives.
25 mail and news readers, and in mail archives.
26
26
27 With the -d/--diffstat option, you will be prompted for each changeset
27 With the -d/--diffstat option, you will be prompted for each changeset
28 with a diffstat summary and the changeset summary, so you can be sure
28 with a diffstat summary and the changeset summary, so you can be sure
29 you are sending the right changes.
29 you are sending the right changes.
30
30
31 To enable this extension:
31 To enable this extension:
32
32
33 [extensions]
33 [extensions]
34 hgext.patchbomb =
34 hgext.patchbomb =
35
35
36 To configure other defaults, add a section like this to your hgrc
36 To configure other defaults, add a section like this to your hgrc
37 file:
37 file:
38
38
39 [email]
39 [email]
40 from = My Name <my@email>
40 from = My Name <my@email>
41 to = recipient1, recipient2, ...
41 to = recipient1, recipient2, ...
42 cc = cc1, cc2, ...
42 cc = cc1, cc2, ...
43 bcc = bcc1, bcc2, ...
43 bcc = bcc1, bcc2, ...
44
44
45 Then you can use the "hg email" command to mail a series of changesets
45 Then you can use the "hg email" command to mail a series of changesets
46 as a patchbomb.
46 as a patchbomb.
47
47
48 To avoid sending patches prematurely, it is a good idea to first run
48 To avoid sending patches prematurely, it is a good idea to first run
49 the "email" command with the "-n" option (test only). You will be
49 the "email" command with the "-n" option (test only). You will be
50 prompted for an email recipient address, a subject and an introductory
50 prompted for an email recipient address, a subject and an introductory
51 message describing the patches of your patchbomb. Then when all is
51 message describing the patches of your patchbomb. Then when all is
52 done, patchbomb messages are displayed. If the PAGER environment
52 done, patchbomb messages are displayed. If the PAGER environment
53 variable is set, your pager will be fired up once for each patchbomb
53 variable is set, your pager will be fired up once for each patchbomb
54 message, so you can verify everything is alright.
54 message, so you can verify everything is alright.
55
55
56 The -m/--mbox option is also very useful. Instead of previewing each
56 The -m/--mbox option is also very useful. Instead of previewing each
57 patchbomb message in a pager or sending the messages directly, it will
57 patchbomb message in a pager or sending the messages directly, it will
58 create a UNIX mailbox file with the patch emails. This mailbox file
58 create a UNIX mailbox file with the patch emails. This mailbox file
59 can be previewed with any mail user agent which supports UNIX mbox
59 can be previewed with any mail user agent which supports UNIX mbox
60 files, e.g. with mutt:
60 files, e.g. with mutt:
61
61
62 % mutt -R -f mbox
62 % mutt -R -f mbox
63
63
64 When you are previewing the patchbomb messages, you can use `formail'
64 When you are previewing the patchbomb messages, you can use `formail'
65 (a utility that is commonly installed as part of the procmail
65 (a utility that is commonly installed as part of the procmail
66 package), to send each message out:
66 package), to send each message out:
67
67
68 % formail -s sendmail -bm -t < mbox
68 % formail -s sendmail -bm -t < mbox
69
69
70 That should be all. Now your patchbomb is on its way out.
70 That should be all. Now your patchbomb is on its way out.
71
71
72 You can also either configure the method option in the email section
72 You can also either configure the method option in the email section
73 to be a sendmail compatible mailer or fill out the [smtp] section so
73 to be a sendmail compatible mailer or fill out the [smtp] section so
74 that the patchbomb extension can automatically send patchbombs
74 that the patchbomb extension can automatically send patchbombs
75 directly from the commandline. See the [email] and [smtp] sections in
75 directly from the commandline. See the [email] and [smtp] sections in
76 hgrc(5) for details.'''
76 hgrc(5) for details.'''
77
77
78 import os, errno, socket, tempfile, cStringIO
78 import os, errno, socket, tempfile, cStringIO
79 import email.MIMEMultipart, email.MIMEBase
79 import email.MIMEMultipart, email.MIMEBase
80 import email.Utils, email.Encoders, email.Generator
80 import email.Utils, email.Encoders, email.Generator
81 from mercurial import cmdutil, commands, hg, mail, patch, util
81 from mercurial import cmdutil, commands, hg, mail, patch, util
82 from mercurial.i18n import _
82 from mercurial.i18n import _
83 from mercurial.node import bin
83 from mercurial.node import bin
84
84
85 def prompt(ui, prompt, default=None, rest=': ', empty_ok=False):
85 def prompt(ui, prompt, default=None, rest=': ', empty_ok=False):
86 if not ui.interactive():
86 if not ui.interactive():
87 return default
87 return default
88 if default:
88 if default:
89 prompt += ' [%s]' % default
89 prompt += ' [%s]' % default
90 prompt += rest
90 prompt += rest
91 while True:
91 while True:
92 r = ui.prompt(prompt, default=default)
92 r = ui.prompt(prompt, default=default)
93 if r:
93 if r:
94 return r
94 return r
95 if default is not None:
95 if default is not None:
96 return default
96 return default
97 if empty_ok:
97 if empty_ok:
98 return r
98 return r
99 ui.warn(_('Please enter a valid value.\n'))
99 ui.warn(_('Please enter a valid value.\n'))
100
100
101 def cdiffstat(ui, summary, patchlines):
101 def cdiffstat(ui, summary, patchlines):
102 s = patch.diffstat(patchlines)
102 s = patch.diffstat(patchlines)
103 if summary:
103 if summary:
104 ui.write(summary, '\n')
104 ui.write(summary, '\n')
105 ui.write(s, '\n')
105 ui.write(s, '\n')
106 ans = prompt(ui, _('does the diffstat above look okay? '), 'y')
106 ans = prompt(ui, _('does the diffstat above look okay? '), 'y')
107 if not ans.lower().startswith('y'):
107 if not ans.lower().startswith('y'):
108 raise util.Abort(_('diffstat rejected'))
108 raise util.Abort(_('diffstat rejected'))
109 return s
109 return s
110
110
111 def makepatch(ui, repo, patch, opts, _charsets, idx, total, patchname=None):
111 def makepatch(ui, repo, patch, opts, _charsets, idx, total, patchname=None):
112
112
113 desc = []
113 desc = []
114 node = None
114 node = None
115 body = ''
115 body = ''
116
116
117 for line in patch:
117 for line in patch:
118 if line.startswith('#'):
118 if line.startswith('#'):
119 if line.startswith('# Node ID'):
119 if line.startswith('# Node ID'):
120 node = line.split()[-1]
120 node = line.split()[-1]
121 continue
121 continue
122 if line.startswith('diff -r') or line.startswith('diff --git'):
122 if line.startswith('diff -r') or line.startswith('diff --git'):
123 break
123 break
124 desc.append(line)
124 desc.append(line)
125
125
126 if not patchname and not node:
126 if not patchname and not node:
127 raise ValueError
127 raise ValueError
128
128
129 if opts.get('attach'):
129 if opts.get('attach'):
130 body = ('\n'.join(desc[1:]).strip() or
130 body = ('\n'.join(desc[1:]).strip() or
131 'Patch subject is complete summary.')
131 'Patch subject is complete summary.')
132 body += '\n\n\n'
132 body += '\n\n\n'
133
133
134 if opts.get('plain'):
134 if opts.get('plain'):
135 while patch and patch[0].startswith('# '):
135 while patch and patch[0].startswith('# '):
136 patch.pop(0)
136 patch.pop(0)
137 if patch:
137 if patch:
138 patch.pop(0)
138 patch.pop(0)
139 while patch and not patch[0].strip():
139 while patch and not patch[0].strip():
140 patch.pop(0)
140 patch.pop(0)
141
141
142 if opts.get('diffstat'):
142 if opts.get('diffstat'):
143 body += cdiffstat(ui, '\n'.join(desc), patch) + '\n\n'
143 body += cdiffstat(ui, '\n'.join(desc), patch) + '\n\n'
144
144
145 if opts.get('attach') or opts.get('inline'):
145 if opts.get('attach') or opts.get('inline'):
146 msg = email.MIMEMultipart.MIMEMultipart()
146 msg = email.MIMEMultipart.MIMEMultipart()
147 if body:
147 if body:
148 msg.attach(mail.mimeencode(ui, body, _charsets, opts.get('test')))
148 msg.attach(mail.mimeencode(ui, body, _charsets, opts.get('test')))
149 p = mail.mimetextpatch('\n'.join(patch), 'x-patch', opts.get('test'))
149 p = mail.mimetextpatch('\n'.join(patch), 'x-patch', opts.get('test'))
150 binnode = bin(node)
150 binnode = bin(node)
151 # if node is mq patch, it will have patch file name as tag
151 # if node is mq patch, it will have patch file name as tag
152 if not patchname:
152 if not patchname:
153 patchtags = [t for t in repo.nodetags(binnode)
153 patchtags = [t for t in repo.nodetags(binnode)
154 if t.endswith('.patch') or t.endswith('.diff')]
154 if t.endswith('.patch') or t.endswith('.diff')]
155 if patchtags:
155 if patchtags:
156 patchname = patchtags[0]
156 patchname = patchtags[0]
157 elif total > 1:
157 elif total > 1:
158 patchname = cmdutil.make_filename(repo, '%b-%n.patch',
158 patchname = cmdutil.make_filename(repo, '%b-%n.patch',
159 binnode, seqno=idx, total=total)
159 binnode, seqno=idx, total=total)
160 else:
160 else:
161 patchname = cmdutil.make_filename(repo, '%b.patch', binnode)
161 patchname = cmdutil.make_filename(repo, '%b.patch', binnode)
162 disposition = 'inline'
162 disposition = 'inline'
163 if opts.get('attach'):
163 if opts.get('attach'):
164 disposition = 'attachment'
164 disposition = 'attachment'
165 p['Content-Disposition'] = disposition + '; filename=' + patchname
165 p['Content-Disposition'] = disposition + '; filename=' + patchname
166 msg.attach(p)
166 msg.attach(p)
167 else:
167 else:
168 body += '\n'.join(patch)
168 body += '\n'.join(patch)
169 msg = mail.mimetextpatch(body, display=opts.get('test'))
169 msg = mail.mimetextpatch(body, display=opts.get('test'))
170
170
171 subj = desc[0].strip().rstrip('. ')
171 subj = desc[0].strip().rstrip('. ')
172 if total == 1 and not opts.get('intro'):
172 if total == 1 and not opts.get('intro'):
173 subj = '[PATCH] ' + (opts.get('subject') or subj)
173 subj = '[PATCH] ' + (opts.get('subject') or subj)
174 else:
174 else:
175 tlen = len(str(total))
175 tlen = len(str(total))
176 subj = '[PATCH %0*d of %d] %s' % (tlen, idx, total, subj)
176 subj = '[PATCH %0*d of %d] %s' % (tlen, idx, total, subj)
177 msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test'))
177 msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test'))
178 msg['X-Mercurial-Node'] = node
178 msg['X-Mercurial-Node'] = node
179 return msg, subj
179 return msg, subj
180
180
181 def patchbomb(ui, repo, *revs, **opts):
181 def patchbomb(ui, repo, *revs, **opts):
182 '''send changesets by email
182 '''send changesets by email
183
183
184 By default, diffs are sent in the format generated by hg export,
184 By default, diffs are sent in the format generated by hg export,
185 one per message. The series starts with a "[PATCH 0 of N]"
185 one per message. The series starts with a "[PATCH 0 of N]"
186 introduction, which describes the series as a whole.
186 introduction, which describes the series as a whole.
187
187
188 Each patch email has a Subject line of "[PATCH M of N] ...", using
188 Each patch email has a Subject line of "[PATCH M of N] ...", using
189 the first line of the changeset description as the subject text.
189 the first line of the changeset description as the subject text.
190 The message contains two or three parts. First, the changeset
190 The message contains two or three parts. First, the changeset
191 description. Next, (optionally) if the diffstat program is
191 description. Next, (optionally) if the diffstat program is
192 installed and -d/--diffstat is used, the result of running
192 installed and -d/--diffstat is used, the result of running
193 diffstat on the patch. Finally, the patch itself, as generated by
193 diffstat on the patch. Finally, the patch itself, as generated by
194 "hg export".
194 "hg export".
195
195
196 By default the patch is included as text in the email body for
196 By default the patch is included as text in the email body for
197 easy reviewing. Using the -a/--attach option will instead create
197 easy reviewing. Using the -a/--attach option will instead create
198 an attachment for the patch. With -i/--inline an inline attachment
198 an attachment for the patch. With -i/--inline an inline attachment
199 will be created.
199 will be created.
200
200
201 With -o/--outgoing, emails will be generated for patches not found
201 With -o/--outgoing, emails will be generated for patches not found
202 in the destination repository (or only those which are ancestors
202 in the destination repository (or only those which are ancestors
203 of the specified revisions if any are provided)
203 of the specified revisions if any are provided)
204
204
205 With -b/--bundle, changesets are selected as for --outgoing, but a
205 With -b/--bundle, changesets are selected as for --outgoing, but a
206 single email containing a binary Mercurial bundle as an attachment
206 single email containing a binary Mercurial bundle as an attachment
207 will be sent.
207 will be sent.
208
208
209 Examples:
209 Examples:
210
210
211 hg email -r 3000 # send patch 3000 only
211 hg email -r 3000 # send patch 3000 only
212 hg email -r 3000 -r 3001 # send patches 3000 and 3001
212 hg email -r 3000 -r 3001 # send patches 3000 and 3001
213 hg email -r 3000:3005 # send patches 3000 through 3005
213 hg email -r 3000:3005 # send patches 3000 through 3005
214 hg email 3000 # send patch 3000 (deprecated)
214 hg email 3000 # send patch 3000 (deprecated)
215
215
216 hg email -o # send all patches not in default
216 hg email -o # send all patches not in default
217 hg email -o DEST # send all patches not in DEST
217 hg email -o DEST # send all patches not in DEST
218 hg email -o -r 3000 # send all ancestors of 3000 not in default
218 hg email -o -r 3000 # send all ancestors of 3000 not in default
219 hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST
219 hg email -o -r 3000 DEST # send all ancestors of 3000 not in DEST
220
220
221 hg email -b # send bundle of all patches not in default
221 hg email -b # send bundle of all patches not in default
222 hg email -b DEST # send bundle of all patches not in DEST
222 hg email -b DEST # send bundle of all patches not in DEST
223 hg email -b -r 3000 # bundle of all ancestors of 3000 not in default
223 hg email -b -r 3000 # bundle of all ancestors of 3000 not in default
224 hg email -b -r 3000 DEST # bundle of all ancestors of 3000 not in DEST
224 hg email -b -r 3000 DEST # bundle of all ancestors of 3000 not in DEST
225
225
226 Before using this command, you will need to enable email in your
226 Before using this command, you will need to enable email in your
227 hgrc. See the [email] section in hgrc(5) for details.
227 hgrc. See the [email] section in hgrc(5) for details.
228 '''
228 '''
229
229
230 _charsets = mail._charsets(ui)
230 _charsets = mail._charsets(ui)
231
231
232 def outgoing(dest, revs):
232 def outgoing(dest, revs):
233 '''Return the revisions present locally but not in dest'''
233 '''Return the revisions present locally but not in dest'''
234 dest = ui.expandpath(dest or 'default-push', dest or 'default')
234 dest = ui.expandpath(dest or 'default-push', dest or 'default')
235 revs = [repo.lookup(rev) for rev in revs]
235 revs = [repo.lookup(rev) for rev in revs]
236 other = hg.repository(cmdutil.remoteui(repo, opts), dest)
236 other = hg.repository(cmdutil.remoteui(repo, opts), dest)
237 ui.status(_('comparing with %s\n') % dest)
237 ui.status(_('comparing with %s\n') % dest)
238 o = repo.findoutgoing(other)
238 o = repo.findoutgoing(other)
239 if not o:
239 if not o:
240 ui.status(_("no changes found\n"))
240 ui.status(_("no changes found\n"))
241 return []
241 return []
242 o = repo.changelog.nodesbetween(o, revs or None)[0]
242 o = repo.changelog.nodesbetween(o, revs or None)[0]
243 return [str(repo.changelog.rev(r)) for r in o]
243 return [str(repo.changelog.rev(r)) for r in o]
244
244
245 def getpatches(revs):
245 def getpatches(revs):
246 for r in cmdutil.revrange(repo, revs):
246 for r in cmdutil.revrange(repo, revs):
247 output = cStringIO.StringIO()
247 output = cStringIO.StringIO()
248 patch.export(repo, [r], fp=output,
248 patch.export(repo, [r], fp=output,
249 opts=patch.diffopts(ui, opts))
249 opts=patch.diffopts(ui, opts))
250 yield output.getvalue().split('\n')
250 yield output.getvalue().split('\n')
251
251
252 def getbundle(dest):
252 def getbundle(dest):
253 tmpdir = tempfile.mkdtemp(prefix='hg-email-bundle-')
253 tmpdir = tempfile.mkdtemp(prefix='hg-email-bundle-')
254 tmpfn = os.path.join(tmpdir, 'bundle')
254 tmpfn = os.path.join(tmpdir, 'bundle')
255 try:
255 try:
256 commands.bundle(ui, repo, tmpfn, dest, **opts)
256 commands.bundle(ui, repo, tmpfn, dest, **opts)
257 return open(tmpfn, 'rb').read()
257 return open(tmpfn, 'rb').read()
258 finally:
258 finally:
259 try:
259 try:
260 os.unlink(tmpfn)
260 os.unlink(tmpfn)
261 except:
261 except:
262 pass
262 pass
263 os.rmdir(tmpdir)
263 os.rmdir(tmpdir)
264
264
265 if not (opts.get('test') or opts.get('mbox')):
265 if not (opts.get('test') or opts.get('mbox')):
266 # really sending
266 # really sending
267 mail.validateconfig(ui)
267 mail.validateconfig(ui)
268
268
269 if not (revs or opts.get('rev')
269 if not (revs or opts.get('rev')
270 or opts.get('outgoing') or opts.get('bundle')
270 or opts.get('outgoing') or opts.get('bundle')
271 or opts.get('patches')):
271 or opts.get('patches')):
272 raise util.Abort(_('specify at least one changeset with -r or -o'))
272 raise util.Abort(_('specify at least one changeset with -r or -o'))
273
273
274 if opts.get('outgoing') and opts.get('bundle'):
274 if opts.get('outgoing') and opts.get('bundle'):
275 raise util.Abort(_("--outgoing mode always on with --bundle;"
275 raise util.Abort(_("--outgoing mode always on with --bundle;"
276 " do not re-specify --outgoing"))
276 " do not re-specify --outgoing"))
277
277
278 if opts.get('outgoing') or opts.get('bundle'):
278 if opts.get('outgoing') or opts.get('bundle'):
279 if len(revs) > 1:
279 if len(revs) > 1:
280 raise util.Abort(_("too many destinations"))
280 raise util.Abort(_("too many destinations"))
281 dest = revs and revs[0] or None
281 dest = revs and revs[0] or None
282 revs = []
282 revs = []
283
283
284 if opts.get('rev'):
284 if opts.get('rev'):
285 if revs:
285 if revs:
286 raise util.Abort(_('use only one form to specify the revision'))
286 raise util.Abort(_('use only one form to specify the revision'))
287 revs = opts.get('rev')
287 revs = opts.get('rev')
288
288
289 if opts.get('outgoing'):
289 if opts.get('outgoing'):
290 revs = outgoing(dest, opts.get('rev'))
290 revs = outgoing(dest, opts.get('rev'))
291 if opts.get('bundle'):
291 if opts.get('bundle'):
292 opts['revs'] = revs
292 opts['revs'] = revs
293
293
294 # start
294 # start
295 if opts.get('date'):
295 if opts.get('date'):
296 start_time = util.parsedate(opts.get('date'))
296 start_time = util.parsedate(opts.get('date'))
297 else:
297 else:
298 start_time = util.makedate()
298 start_time = util.makedate()
299
299
300 def genmsgid(id):
300 def genmsgid(id):
301 return '<%s.%s@%s>' % (id[:20], int(start_time[0]), socket.getfqdn())
301 return '<%s.%s@%s>' % (id[:20], int(start_time[0]), socket.getfqdn())
302
302
303 def getdescription(body, sender):
303 def getdescription(body, sender):
304 if opts.get('desc'):
304 if opts.get('desc'):
305 body = open(opts.get('desc')).read()
305 body = open(opts.get('desc')).read()
306 else:
306 else:
307 ui.write(_('\nWrite the introductory message for the '
307 ui.write(_('\nWrite the introductory message for the '
308 'patch series.\n\n'))
308 'patch series.\n\n'))
309 body = ui.edit(body, sender)
309 body = ui.edit(body, sender)
310 return body
310 return body
311
311
312 def getpatchmsgs(patches, patchnames=None):
312 def getpatchmsgs(patches, patchnames=None):
313 jumbo = []
313 jumbo = []
314 msgs = []
314 msgs = []
315
315
316 ui.write(_('This patch series consists of %d patches.\n\n')
316 ui.write(_('This patch series consists of %d patches.\n\n')
317 % len(patches))
317 % len(patches))
318
318
319 name = None
319 name = None
320 for i, p in enumerate(patches):
320 for i, p in enumerate(patches):
321 jumbo.extend(p)
321 jumbo.extend(p)
322 if patchnames:
322 if patchnames:
323 name = patchnames[i]
323 name = patchnames[i]
324 msg = makepatch(ui, repo, p, opts, _charsets, i + 1,
324 msg = makepatch(ui, repo, p, opts, _charsets, i + 1,
325 len(patches), name)
325 len(patches), name)
326 msgs.append(msg)
326 msgs.append(msg)
327
327
328 if len(patches) > 1 or opts.get('intro'):
328 if len(patches) > 1 or opts.get('intro'):
329 tlen = len(str(len(patches)))
329 tlen = len(str(len(patches)))
330
330
331 subj = '[PATCH %0*d of %d] %s' % (
331 subj = '[PATCH %0*d of %d] %s' % (
332 tlen, 0, len(patches),
332 tlen, 0, len(patches),
333 opts.get('subject') or
333 opts.get('subject') or
334 prompt(ui, 'Subject:',
334 prompt(ui, 'Subject:',
335 rest=' [PATCH %0*d of %d] ' % (tlen, 0, len(patches))))
335 rest=' [PATCH %0*d of %d] ' % (tlen, 0, len(patches))))
336
336
337 body = ''
337 body = ''
338 if opts.get('diffstat'):
338 if opts.get('diffstat'):
339 d = cdiffstat(ui, _('Final summary:\n'), jumbo)
339 d = cdiffstat(ui, _('Final summary:\n'), jumbo)
340 if d:
340 if d:
341 body = '\n' + d
341 body = '\n' + d
342
342
343 body = getdescription(body, sender)
343 body = getdescription(body, sender)
344 msg = mail.mimeencode(ui, body, _charsets, opts.get('test'))
344 msg = mail.mimeencode(ui, body, _charsets, opts.get('test'))
345 msg['Subject'] = mail.headencode(ui, subj, _charsets,
345 msg['Subject'] = mail.headencode(ui, subj, _charsets,
346 opts.get('test'))
346 opts.get('test'))
347
347
348 msgs.insert(0, (msg, subj))
348 msgs.insert(0, (msg, subj))
349 return msgs
349 return msgs
350
350
351 def getbundlemsgs(bundle):
351 def getbundlemsgs(bundle):
352 subj = (opts.get('subject')
352 subj = (opts.get('subject')
353 or prompt(ui, 'Subject:', 'A bundle for your repository'))
353 or prompt(ui, 'Subject:', 'A bundle for your repository'))
354
354
355 body = getdescription('', sender)
355 body = getdescription('', sender)
356 msg = email.MIMEMultipart.MIMEMultipart()
356 msg = email.MIMEMultipart.MIMEMultipart()
357 if body:
357 if body:
358 msg.attach(mail.mimeencode(ui, body, _charsets, opts.get('test')))
358 msg.attach(mail.mimeencode(ui, body, _charsets, opts.get('test')))
359 datapart = email.MIMEBase.MIMEBase('application', 'x-mercurial-bundle')
359 datapart = email.MIMEBase.MIMEBase('application', 'x-mercurial-bundle')
360 datapart.set_payload(bundle)
360 datapart.set_payload(bundle)
361 bundlename = '%s.hg' % opts.get('bundlename', 'bundle')
361 bundlename = '%s.hg' % opts.get('bundlename', 'bundle')
362 datapart.add_header('Content-Disposition', 'attachment',
362 datapart.add_header('Content-Disposition', 'attachment',
363 filename=bundlename)
363 filename=bundlename)
364 email.Encoders.encode_base64(datapart)
364 email.Encoders.encode_base64(datapart)
365 msg.attach(datapart)
365 msg.attach(datapart)
366 msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test'))
366 msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test'))
367 return [(msg, subj)]
367 return [(msg, subj)]
368
368
369 sender = (opts.get('from') or ui.config('email', 'from') or
369 sender = (opts.get('from') or ui.config('email', 'from') or
370 ui.config('patchbomb', 'from') or
370 ui.config('patchbomb', 'from') or
371 prompt(ui, 'From', ui.username()))
371 prompt(ui, 'From', ui.username()))
372
372
373 # internal option used by pbranches
373 # internal option used by pbranches
374 patches = opts.get('patches')
374 patches = opts.get('patches')
375 if patches:
375 if patches:
376 msgs = getpatchmsgs(patches, opts.get('patchnames'))
376 msgs = getpatchmsgs(patches, opts.get('patchnames'))
377 elif opts.get('bundle'):
377 elif opts.get('bundle'):
378 msgs = getbundlemsgs(getbundle(dest))
378 msgs = getbundlemsgs(getbundle(dest))
379 else:
379 else:
380 msgs = getpatchmsgs(list(getpatches(revs)))
380 msgs = getpatchmsgs(list(getpatches(revs)))
381
381
382 def getaddrs(opt, prpt, default = None):
382 def getaddrs(opt, prpt, default = None):
383 addrs = opts.get(opt) or (ui.config('email', opt) or
383 addrs = opts.get(opt) or (ui.config('email', opt) or
384 ui.config('patchbomb', opt) or
384 ui.config('patchbomb', opt) or
385 prompt(ui, prpt, default)).split(',')
385 prompt(ui, prpt, default)).split(',')
386 return [mail.addressencode(ui, a.strip(), _charsets, opts.get('test'))
386 return [mail.addressencode(ui, a.strip(), _charsets, opts.get('test'))
387 for a in addrs if a.strip()]
387 for a in addrs if a.strip()]
388
388
389 to = getaddrs('to', 'To')
389 to = getaddrs('to', 'To')
390 cc = getaddrs('cc', 'Cc', '')
390 cc = getaddrs('cc', 'Cc', '')
391
391
392 bcc = opts.get('bcc') or (ui.config('email', 'bcc') or
392 bcc = opts.get('bcc') or (ui.config('email', 'bcc') or
393 ui.config('patchbomb', 'bcc') or '').split(',')
393 ui.config('patchbomb', 'bcc') or '').split(',')
394 bcc = [mail.addressencode(ui, a.strip(), _charsets, opts.get('test'))
394 bcc = [mail.addressencode(ui, a.strip(), _charsets, opts.get('test'))
395 for a in bcc if a.strip()]
395 for a in bcc if a.strip()]
396
396
397 ui.write('\n')
397 ui.write('\n')
398
398
399 parent = opts.get('in_reply_to') or None
399 parent = opts.get('in_reply_to') or None
400 first = True
400
401
401 sender_addr = email.Utils.parseaddr(sender)[1]
402 sender_addr = email.Utils.parseaddr(sender)[1]
402 sender = mail.addressencode(ui, sender, _charsets, opts.get('test'))
403 sender = mail.addressencode(ui, sender, _charsets, opts.get('test'))
403 sendmail = None
404 sendmail = None
404 for m, subj in msgs:
405 for m, subj in msgs:
405 try:
406 try:
406 m['Message-Id'] = genmsgid(m['X-Mercurial-Node'])
407 m['Message-Id'] = genmsgid(m['X-Mercurial-Node'])
407 except TypeError:
408 except TypeError:
408 m['Message-Id'] = genmsgid('patchbomb')
409 m['Message-Id'] = genmsgid('patchbomb')
409 if parent:
410 if parent:
410 m['In-Reply-To'] = parent
411 m['In-Reply-To'] = parent
411 m['References'] = parent
412 m['References'] = parent
412 else:
413 if first:
413 parent = m['Message-Id']
414 parent = m['Message-Id']
415 first = False
416
414 m['User-Agent'] = 'Mercurial-patchbomb/%s' % util.version()
417 m['User-Agent'] = 'Mercurial-patchbomb/%s' % util.version()
415 m['Date'] = util.datestr(start_time, "%a, %d %b %Y %H:%M:%S %1%2")
418 m['Date'] = util.datestr(start_time, "%a, %d %b %Y %H:%M:%S %1%2")
416
419
417 start_time = (start_time[0] + 1, start_time[1])
420 start_time = (start_time[0] + 1, start_time[1])
418 m['From'] = sender
421 m['From'] = sender
419 m['To'] = ', '.join(to)
422 m['To'] = ', '.join(to)
420 if cc:
423 if cc:
421 m['Cc'] = ', '.join(cc)
424 m['Cc'] = ', '.join(cc)
422 if bcc:
425 if bcc:
423 m['Bcc'] = ', '.join(bcc)
426 m['Bcc'] = ', '.join(bcc)
424 if opts.get('test'):
427 if opts.get('test'):
425 ui.status(_('Displaying '), subj, ' ...\n')
428 ui.status(_('Displaying '), subj, ' ...\n')
426 ui.flush()
429 ui.flush()
427 if 'PAGER' in os.environ:
430 if 'PAGER' in os.environ:
428 fp = util.popen(os.environ['PAGER'], 'w')
431 fp = util.popen(os.environ['PAGER'], 'w')
429 else:
432 else:
430 fp = ui
433 fp = ui
431 generator = email.Generator.Generator(fp, mangle_from_=False)
434 generator = email.Generator.Generator(fp, mangle_from_=False)
432 try:
435 try:
433 generator.flatten(m, 0)
436 generator.flatten(m, 0)
434 fp.write('\n')
437 fp.write('\n')
435 except IOError, inst:
438 except IOError, inst:
436 if inst.errno != errno.EPIPE:
439 if inst.errno != errno.EPIPE:
437 raise
440 raise
438 if fp is not ui:
441 if fp is not ui:
439 fp.close()
442 fp.close()
440 elif opts.get('mbox'):
443 elif opts.get('mbox'):
441 ui.status(_('Writing '), subj, ' ...\n')
444 ui.status(_('Writing '), subj, ' ...\n')
442 fp = open(opts.get('mbox'), 'In-Reply-To' in m and 'ab+' or 'wb+')
445 fp = open(opts.get('mbox'), 'In-Reply-To' in m and 'ab+' or 'wb+')
443 generator = email.Generator.Generator(fp, mangle_from_=True)
446 generator = email.Generator.Generator(fp, mangle_from_=True)
444 date = util.datestr(start_time, '%a %b %d %H:%M:%S %Y')
447 date = util.datestr(start_time, '%a %b %d %H:%M:%S %Y')
445 fp.write('From %s %s\n' % (sender_addr, date))
448 fp.write('From %s %s\n' % (sender_addr, date))
446 generator.flatten(m, 0)
449 generator.flatten(m, 0)
447 fp.write('\n\n')
450 fp.write('\n\n')
448 fp.close()
451 fp.close()
449 else:
452 else:
450 if not sendmail:
453 if not sendmail:
451 sendmail = mail.connect(ui)
454 sendmail = mail.connect(ui)
452 ui.status(_('Sending '), subj, ' ...\n')
455 ui.status(_('Sending '), subj, ' ...\n')
453 # Exim does not remove the Bcc field
456 # Exim does not remove the Bcc field
454 del m['Bcc']
457 del m['Bcc']
455 fp = cStringIO.StringIO()
458 fp = cStringIO.StringIO()
456 generator = email.Generator.Generator(fp, mangle_from_=False)
459 generator = email.Generator.Generator(fp, mangle_from_=False)
457 generator.flatten(m, 0)
460 generator.flatten(m, 0)
458 sendmail(sender, to + bcc + cc, fp.getvalue())
461 sendmail(sender, to + bcc + cc, fp.getvalue())
459
462
460 emailopts = [
463 emailopts = [
461 ('a', 'attach', None, _('send patches as attachments')),
464 ('a', 'attach', None, _('send patches as attachments')),
462 ('i', 'inline', None, _('send patches as inline attachments')),
465 ('i', 'inline', None, _('send patches as inline attachments')),
463 ('', 'bcc', [], _('email addresses of blind carbon copy recipients')),
466 ('', 'bcc', [], _('email addresses of blind carbon copy recipients')),
464 ('c', 'cc', [], _('email addresses of copy recipients')),
467 ('c', 'cc', [], _('email addresses of copy recipients')),
465 ('d', 'diffstat', None, _('add diffstat output to messages')),
468 ('d', 'diffstat', None, _('add diffstat output to messages')),
466 ('', 'date', '', _('use the given date as the sending date')),
469 ('', 'date', '', _('use the given date as the sending date')),
467 ('', 'desc', '', _('use the given file as the series description')),
470 ('', 'desc', '', _('use the given file as the series description')),
468 ('f', 'from', '', _('email address of sender')),
471 ('f', 'from', '', _('email address of sender')),
469 ('n', 'test', None, _('print messages that would be sent')),
472 ('n', 'test', None, _('print messages that would be sent')),
470 ('m', 'mbox', '',
473 ('m', 'mbox', '',
471 _('write messages to mbox file instead of sending them')),
474 _('write messages to mbox file instead of sending them')),
472 ('s', 'subject', '',
475 ('s', 'subject', '',
473 _('subject of first message (intro or single patch)')),
476 _('subject of first message (intro or single patch)')),
474 ('', 'in-reply-to', '',
477 ('', 'in-reply-to', '',
475 _('message identifier to reply to')),
478 _('message identifier to reply to')),
476 ('t', 'to', [], _('email addresses of recipients')),
479 ('t', 'to', [], _('email addresses of recipients')),
477 ]
480 ]
478
481
479
482
480 cmdtable = {
483 cmdtable = {
481 "email":
484 "email":
482 (patchbomb,
485 (patchbomb,
483 [('g', 'git', None, _('use git extended diff format')),
486 [('g', 'git', None, _('use git extended diff format')),
484 ('', 'plain', None, _('omit hg patch header')),
487 ('', 'plain', None, _('omit hg patch header')),
485 ('o', 'outgoing', None,
488 ('o', 'outgoing', None,
486 _('send changes not found in the target repository')),
489 _('send changes not found in the target repository')),
487 ('b', 'bundle', None,
490 ('b', 'bundle', None,
488 _('send changes not in target as a binary bundle')),
491 _('send changes not in target as a binary bundle')),
489 ('', 'bundlename', 'bundle',
492 ('', 'bundlename', 'bundle',
490 _('file name of the bundle attachment')),
493 _('file name of the bundle attachment')),
491 ('r', 'rev', [], _('a revision to send')),
494 ('r', 'rev', [], _('a revision to send')),
492 ('', 'force', None,
495 ('', 'force', None,
493 _('run even when remote repository is unrelated '
496 _('run even when remote repository is unrelated '
494 '(with -b/--bundle)')),
497 '(with -b/--bundle)')),
495 ('', 'base', [],
498 ('', 'base', [],
496 _('a base changeset to specify instead of a destination '
499 _('a base changeset to specify instead of a destination '
497 '(with -b/--bundle)')),
500 '(with -b/--bundle)')),
498 ('', 'intro', None,
501 ('', 'intro', None,
499 _('send an introduction email for a single patch')),
502 _('send an introduction email for a single patch')),
500 ] + emailopts + commands.remoteopts,
503 ] + emailopts + commands.remoteopts,
501 _('hg email [OPTION]... [DEST]...'))
504 _('hg email [OPTION]... [DEST]...'))
502 }
505 }
@@ -1,150 +1,153 b''
1 #!/bin/sh
1 #!/bin/sh
2
2
3 fixheaders()
3 fixheaders()
4 {
4 {
5 sed -e 's/\(Message-Id:.*@\).*/\1/' \
5 sed -e 's/\(Message-Id:.*@\).*/\1/' \
6 -e 's/\(In-Reply-To:.*@\).*/\1/' \
6 -e 's/\(In-Reply-To:.*@\).*/\1/' \
7 -e 's/\(References:.*@\).*/\1/' \
7 -e 's/\(References:.*@\).*/\1/' \
8 -e 's/\(User-Agent:.*\)\/.*/\1/' \
8 -e 's/\(User-Agent:.*\)\/.*/\1/' \
9 -e 's/===.*/===/'
9 -e 's/===.*/===/'
10 }
10 }
11
11
12 echo "[extensions]" >> $HGRCPATH
12 echo "[extensions]" >> $HGRCPATH
13 echo "patchbomb=" >> $HGRCPATH
13 echo "patchbomb=" >> $HGRCPATH
14
14
15 COLUMNS=80; export COLUMNS
15 COLUMNS=80; export COLUMNS
16
16
17 hg init t
17 hg init t
18 cd t
18 cd t
19 echo a > a
19 echo a > a
20 hg commit -Ama -d '1 0'
20 hg commit -Ama -d '1 0'
21
21
22 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -r tip | \
22 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -r tip | \
23 fixheaders
23 fixheaders
24
24
25 echo b > b
25 echo b > b
26 hg commit -Amb -d '2 0'
26 hg commit -Amb -d '2 0'
27
27
28 hg email --date '1970-1-1 0:2' -n -f quux -t foo -c bar -s test -r 0:tip | \
28 hg email --date '1970-1-1 0:2' -n -f quux -t foo -c bar -s test -r 0:tip | \
29 fixheaders
29 fixheaders
30
30
31 hg email -m test.mbox -f quux -t foo -c bar -s test 0:tip
31 hg email -m test.mbox -f quux -t foo -c bar -s test 0:tip
32
32
33 cd ..
33 cd ..
34
34
35 hg clone -q t t2
35 hg clone -q t t2
36 cd t2
36 cd t2
37 echo c > c
37 echo c > c
38 hg commit -Amc -d '3 0'
38 hg commit -Amc -d '3 0'
39
39
40 cat > description <<EOF
40 cat > description <<EOF
41 a multiline
41 a multiline
42
42
43 description
43 description
44 EOF
44 EOF
45
45
46 echo "% test bundle and description"
46 echo "% test bundle and description"
47 hg email --date '1970-1-1 0:3' -n -f quux -t foo \
47 hg email --date '1970-1-1 0:3' -n -f quux -t foo \
48 -c bar -s test -r tip -b --desc description | \
48 -c bar -s test -r tip -b --desc description | \
49 fixheaders
49 fixheaders
50
50
51 echo "% utf-8 patch"
51 echo "% utf-8 patch"
52 python -c 'fp = open("utf", "wb"); fp.write("h\xC3\xB6mma!\n"); fp.close();'
52 python -c 'fp = open("utf", "wb"); fp.write("h\xC3\xB6mma!\n"); fp.close();'
53 hg commit -A -d '4 0' -m 'charset=utf-8; content-transfer-encoding: base64'
53 hg commit -A -d '4 0' -m 'charset=utf-8; content-transfer-encoding: base64'
54
54
55 echo "% no mime encoding for email --test"
55 echo "% no mime encoding for email --test"
56 hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n | \
56 hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n | \
57 fixheaders > mailtest
57 fixheaders > mailtest
58 echo "% md5sum of 8-bit output"
58 echo "% md5sum of 8-bit output"
59 $TESTDIR/md5sum.py mailtest
59 $TESTDIR/md5sum.py mailtest
60 rm mailtest
60 rm mailtest
61
61
62 echo "% mime encoded mbox (base64)"
62 echo "% mime encoded mbox (base64)"
63 hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -m mbox
63 hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -m mbox
64 cat mbox | fixheaders
64 cat mbox | fixheaders
65 rm mbox
65 rm mbox
66
66
67 echo "% mime encoded mbox (quoted-printable)"
67 echo "% mime encoded mbox (quoted-printable)"
68 python -c 'fp = open("qp", "wb"); fp.write("%s\nfoo\n\nbar\n" % \
68 python -c 'fp = open("qp", "wb"); fp.write("%s\nfoo\n\nbar\n" % \
69 ("x" * 1024)); fp.close();'
69 ("x" * 1024)); fp.close();'
70 hg commit -A -d '4 0' -m \
70 hg commit -A -d '4 0' -m \
71 'charset=utf-8; content-transfer-encoding: quoted-printable'
71 'charset=utf-8; content-transfer-encoding: quoted-printable'
72
72
73 echo "% no mime encoding for email --test"
73 echo "% no mime encoding for email --test"
74 hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n | \
74 hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n | \
75 fixheaders > mailtest
75 fixheaders > mailtest
76 echo "% md5sum of qp output"
76 echo "% md5sum of qp output"
77 $TESTDIR/md5sum.py mailtest
77 $TESTDIR/md5sum.py mailtest
78 rm mailtest
78 rm mailtest
79
79
80 echo "% mime encoded mbox (quoted-printable)"
80 echo "% mime encoded mbox (quoted-printable)"
81 hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -m mbox
81 hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -m mbox
82 cat mbox | fixheaders
82 cat mbox | fixheaders
83 rm mbox
83 rm mbox
84
84
85 echo "% iso-8859-1 patch"
85 echo "% iso-8859-1 patch"
86 python -c 'fp = open("isolatin", "wb"); fp.write("h\xF6mma!\n"); fp.close();'
86 python -c 'fp = open("isolatin", "wb"); fp.write("h\xF6mma!\n"); fp.close();'
87 hg commit -A -d '5 0' -m 'charset=us-ascii; content-transfer-encoding: 8bit'
87 hg commit -A -d '5 0' -m 'charset=us-ascii; content-transfer-encoding: 8bit'
88
88
89 echo "% fake ascii mbox"
89 echo "% fake ascii mbox"
90 hg email --date '1970-1-1 0:5' -f quux -t foo -c bar -r tip -m mbox
90 hg email --date '1970-1-1 0:5' -f quux -t foo -c bar -r tip -m mbox
91 fixheaders < mbox > mboxfix
91 fixheaders < mbox > mboxfix
92 echo "% md5sum of 8-bit output"
92 echo "% md5sum of 8-bit output"
93 $TESTDIR/md5sum.py mboxfix
93 $TESTDIR/md5sum.py mboxfix
94
94
95 echo "% test diffstat for single patch"
95 echo "% test diffstat for single patch"
96 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y -r 2 | \
96 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y -r 2 | \
97 fixheaders
97 fixheaders
98
98
99 echo "% test diffstat for multiple patches"
99 echo "% test diffstat for multiple patches"
100 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y \
100 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y \
101 -r 0:1 | fixheaders
101 -r 0:1 | fixheaders
102
102
103 echo "% test inline for single patch"
103 echo "% test inline for single patch"
104 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | \
104 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | \
105 fixheaders
105 fixheaders
106
106
107 echo "% test inline for single patch (quoted-printable)"
107 echo "% test inline for single patch (quoted-printable)"
108 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 4 | \
108 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 4 | \
109 fixheaders
109 fixheaders
110
110
111 echo "% test inline for multiple patches"
111 echo "% test inline for multiple patches"
112 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i \
112 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i \
113 -r 0:1 -r 4 | fixheaders
113 -r 0:1 -r 4 | fixheaders
114
114
115 echo "% test attach for single patch"
115 echo "% test attach for single patch"
116 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 2 | \
116 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 2 | \
117 fixheaders
117 fixheaders
118
118
119 echo "% test attach for single patch (quoted-printable)"
119 echo "% test attach for single patch (quoted-printable)"
120 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 4 | \
120 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 4 | \
121 fixheaders
121 fixheaders
122
122
123 echo "% test attach for multiple patches"
123 echo "% test attach for multiple patches"
124 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a \
124 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a \
125 -r 0:1 -r 4 | fixheaders
125 -r 0:1 -r 4 | fixheaders
126
126
127 echo "% test intro for single patch"
127 echo "% test intro for single patch"
128 hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \
128 hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \
129 -r 2 | fixheaders
129 -r 2 | fixheaders
130
130
131 echo "% test intro for multiple patches"
131 echo "% test intro for multiple patches"
132 hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \
132 hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \
133 -r 0:1 | fixheaders
133 -r 0:1 | fixheaders
134
134
135 echo "% tagging csets"
135 echo "% tagging csets"
136 hg tag -r0 zero zero.foo
136 hg tag -r0 zero zero.foo
137 hg tag -r1 one one.patch
137 hg tag -r1 one one.patch
138 hg tag -r2 two two.diff
138 hg tag -r2 two two.diff
139
139
140 echo "% test inline for single named patch"
140 echo "% test inline for single named patch"
141 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | \
141 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | \
142 fixheaders
142 fixheaders
143
143
144 echo "% test inline for multiple named/unnamed patches"
144 echo "% test inline for multiple named/unnamed patches"
145 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 0:1 | \
145 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 0:1 | \
146 fixheaders
146 fixheaders
147
147
148 echo "% test inreplyto"
148 echo "% test inreplyto"
149 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
149 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
150 -r tip | fixheaders
150 -r tip | fixheaders
151
152 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
153 -r 0:1 | fixheaders
@@ -1,1179 +1,1256 b''
1 adding a
1 adding a
2 This patch series consists of 1 patches.
2 This patch series consists of 1 patches.
3
3
4
4
5 Displaying [PATCH] a ...
5 Displaying [PATCH] a ...
6 Content-Type: text/plain; charset="us-ascii"
6 Content-Type: text/plain; charset="us-ascii"
7 MIME-Version: 1.0
7 MIME-Version: 1.0
8 Content-Transfer-Encoding: 7bit
8 Content-Transfer-Encoding: 7bit
9 Subject: [PATCH] a
9 Subject: [PATCH] a
10 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
10 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
11 Message-Id: <8580ff50825a50c8f716.60@
11 Message-Id: <8580ff50825a50c8f716.60@
12 User-Agent: Mercurial-patchbomb
12 User-Agent: Mercurial-patchbomb
13 Date: Thu, 01 Jan 1970 00:01:00 +0000
13 Date: Thu, 01 Jan 1970 00:01:00 +0000
14 From: quux
14 From: quux
15 To: foo
15 To: foo
16 Cc: bar
16 Cc: bar
17
17
18 # HG changeset patch
18 # HG changeset patch
19 # User test
19 # User test
20 # Date 1 0
20 # Date 1 0
21 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
21 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
22 # Parent 0000000000000000000000000000000000000000
22 # Parent 0000000000000000000000000000000000000000
23 a
23 a
24
24
25 diff -r 000000000000 -r 8580ff50825a a
25 diff -r 000000000000 -r 8580ff50825a a
26 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
26 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
27 +++ b/a Thu Jan 01 00:00:01 1970 +0000
27 +++ b/a Thu Jan 01 00:00:01 1970 +0000
28 @@ -0,0 +1,1 @@
28 @@ -0,0 +1,1 @@
29 +a
29 +a
30
30
31 adding b
31 adding b
32 This patch series consists of 2 patches.
32 This patch series consists of 2 patches.
33
33
34
34
35 Write the introductory message for the patch series.
35 Write the introductory message for the patch series.
36
36
37
37
38 Displaying [PATCH 0 of 2] test ...
38 Displaying [PATCH 0 of 2] test ...
39 Content-Type: text/plain; charset="us-ascii"
39 Content-Type: text/plain; charset="us-ascii"
40 MIME-Version: 1.0
40 MIME-Version: 1.0
41 Content-Transfer-Encoding: 7bit
41 Content-Transfer-Encoding: 7bit
42 Subject: [PATCH 0 of 2] test
42 Subject: [PATCH 0 of 2] test
43 Message-Id: <patchbomb.120@
43 Message-Id: <patchbomb.120@
44 User-Agent: Mercurial-patchbomb
44 User-Agent: Mercurial-patchbomb
45 Date: Thu, 01 Jan 1970 00:02:00 +0000
45 Date: Thu, 01 Jan 1970 00:02:00 +0000
46 From: quux
46 From: quux
47 To: foo
47 To: foo
48 Cc: bar
48 Cc: bar
49
49
50
50
51 Displaying [PATCH 1 of 2] a ...
51 Displaying [PATCH 1 of 2] a ...
52 Content-Type: text/plain; charset="us-ascii"
52 Content-Type: text/plain; charset="us-ascii"
53 MIME-Version: 1.0
53 MIME-Version: 1.0
54 Content-Transfer-Encoding: 7bit
54 Content-Transfer-Encoding: 7bit
55 Subject: [PATCH 1 of 2] a
55 Subject: [PATCH 1 of 2] a
56 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
56 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
57 Message-Id: <8580ff50825a50c8f716.121@
57 Message-Id: <8580ff50825a50c8f716.121@
58 In-Reply-To: <patchbomb.120@
58 In-Reply-To: <patchbomb.120@
59 References: <patchbomb.120@
59 References: <patchbomb.120@
60 User-Agent: Mercurial-patchbomb
60 User-Agent: Mercurial-patchbomb
61 Date: Thu, 01 Jan 1970 00:02:01 +0000
61 Date: Thu, 01 Jan 1970 00:02:01 +0000
62 From: quux
62 From: quux
63 To: foo
63 To: foo
64 Cc: bar
64 Cc: bar
65
65
66 # HG changeset patch
66 # HG changeset patch
67 # User test
67 # User test
68 # Date 1 0
68 # Date 1 0
69 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
69 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
70 # Parent 0000000000000000000000000000000000000000
70 # Parent 0000000000000000000000000000000000000000
71 a
71 a
72
72
73 diff -r 000000000000 -r 8580ff50825a a
73 diff -r 000000000000 -r 8580ff50825a a
74 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
74 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
75 +++ b/a Thu Jan 01 00:00:01 1970 +0000
75 +++ b/a Thu Jan 01 00:00:01 1970 +0000
76 @@ -0,0 +1,1 @@
76 @@ -0,0 +1,1 @@
77 +a
77 +a
78
78
79 Displaying [PATCH 2 of 2] b ...
79 Displaying [PATCH 2 of 2] b ...
80 Content-Type: text/plain; charset="us-ascii"
80 Content-Type: text/plain; charset="us-ascii"
81 MIME-Version: 1.0
81 MIME-Version: 1.0
82 Content-Transfer-Encoding: 7bit
82 Content-Transfer-Encoding: 7bit
83 Subject: [PATCH 2 of 2] b
83 Subject: [PATCH 2 of 2] b
84 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
84 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
85 Message-Id: <97d72e5f12c7e84f8506.122@
85 Message-Id: <97d72e5f12c7e84f8506.122@
86 In-Reply-To: <patchbomb.120@
86 In-Reply-To: <patchbomb.120@
87 References: <patchbomb.120@
87 References: <patchbomb.120@
88 User-Agent: Mercurial-patchbomb
88 User-Agent: Mercurial-patchbomb
89 Date: Thu, 01 Jan 1970 00:02:02 +0000
89 Date: Thu, 01 Jan 1970 00:02:02 +0000
90 From: quux
90 From: quux
91 To: foo
91 To: foo
92 Cc: bar
92 Cc: bar
93
93
94 # HG changeset patch
94 # HG changeset patch
95 # User test
95 # User test
96 # Date 2 0
96 # Date 2 0
97 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
97 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
98 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
98 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
99 b
99 b
100
100
101 diff -r 8580ff50825a -r 97d72e5f12c7 b
101 diff -r 8580ff50825a -r 97d72e5f12c7 b
102 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
102 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
103 +++ b/b Thu Jan 01 00:00:02 1970 +0000
103 +++ b/b Thu Jan 01 00:00:02 1970 +0000
104 @@ -0,0 +1,1 @@
104 @@ -0,0 +1,1 @@
105 +b
105 +b
106
106
107 This patch series consists of 2 patches.
107 This patch series consists of 2 patches.
108
108
109
109
110 Write the introductory message for the patch series.
110 Write the introductory message for the patch series.
111
111
112
112
113 Writing [PATCH 0 of 2] test ...
113 Writing [PATCH 0 of 2] test ...
114 Writing [PATCH 1 of 2] a ...
114 Writing [PATCH 1 of 2] a ...
115 Writing [PATCH 2 of 2] b ...
115 Writing [PATCH 2 of 2] b ...
116 adding c
116 adding c
117 % test bundle and description
117 % test bundle and description
118 searching for changes
118 searching for changes
119 1 changesets found
119 1 changesets found
120
120
121 Displaying test ...
121 Displaying test ...
122 Content-Type: multipart/mixed; boundary="===
122 Content-Type: multipart/mixed; boundary="===
123 MIME-Version: 1.0
123 MIME-Version: 1.0
124 Subject: test
124 Subject: test
125 Message-Id: <patchbomb.180@
125 Message-Id: <patchbomb.180@
126 User-Agent: Mercurial-patchbomb
126 User-Agent: Mercurial-patchbomb
127 Date: Thu, 01 Jan 1970 00:03:00 +0000
127 Date: Thu, 01 Jan 1970 00:03:00 +0000
128 From: quux
128 From: quux
129 To: foo
129 To: foo
130 Cc: bar
130 Cc: bar
131
131
132 --===
132 --===
133 Content-Type: text/plain; charset="us-ascii"
133 Content-Type: text/plain; charset="us-ascii"
134 MIME-Version: 1.0
134 MIME-Version: 1.0
135 Content-Transfer-Encoding: 7bit
135 Content-Transfer-Encoding: 7bit
136
136
137 a multiline
137 a multiline
138
138
139 description
139 description
140
140
141 --===
141 --===
142 Content-Type: application/x-mercurial-bundle
142 Content-Type: application/x-mercurial-bundle
143 MIME-Version: 1.0
143 MIME-Version: 1.0
144 Content-Disposition: attachment; filename="bundle.hg"
144 Content-Disposition: attachment; filename="bundle.hg"
145 Content-Transfer-Encoding: base64
145 Content-Transfer-Encoding: base64
146
146
147 SEcxMEJaaDkxQVkmU1nvR7I3AAAN////lFYQWj1/4HwRkdC/AywIAk0E4pfoSIIIgQCgGEQOcLAA
147 SEcxMEJaaDkxQVkmU1nvR7I3AAAN////lFYQWj1/4HwRkdC/AywIAk0E4pfoSIIIgQCgGEQOcLAA
148 2tA1VPyp4mkeoG0EaaPU0GTT1GjRiNPIg9CZGBqZ6UbU9J+KFU09DNUaGgAAAAAANAGgAAAAA1U8
148 2tA1VPyp4mkeoG0EaaPU0GTT1GjRiNPIg9CZGBqZ6UbU9J+KFU09DNUaGgAAAAAANAGgAAAAA1U8
149 oGgAADQGgAANNANAAAAAAZipFLz3XoakCEQB3PVPyHJVi1iYkAAKQAZQGpQGZESInRnCFMqLDla2
149 oGgAADQGgAANNANAAAAAAZipFLz3XoakCEQB3PVPyHJVi1iYkAAKQAZQGpQGZESInRnCFMqLDla2
150 Bx3qfRQeA2N4lnzKkAmP8kR2asievLLXXebVU8Vg4iEBqcJNJAxIapSU6SM4888ZAciRG6MYAIEE
150 Bx3qfRQeA2N4lnzKkAmP8kR2asievLLXXebVU8Vg4iEBqcJNJAxIapSU6SM4888ZAciRG6MYAIEE
151 SlIBpFisgGkyRjX//TMtfcUAEsGu56+YnE1OlTZmzKm8BSu2rvo4rHAYYaadIFFuTy0LYgIkgLVD
151 SlIBpFisgGkyRjX//TMtfcUAEsGu56+YnE1OlTZmzKm8BSu2rvo4rHAYYaadIFFuTy0LYgIkgLVD
152 sgVa2F19D1tx9+hgbAygLgQwaIqcDdgA4BjQgIiz/AEP72++llgDKhKducqodGE4B0ETqF3JFOFC
152 sgVa2F19D1tx9+hgbAygLgQwaIqcDdgA4BjQgIiz/AEP72++llgDKhKducqodGE4B0ETqF3JFOFC
153 Q70eyNw=
153 Q70eyNw=
154 --===
154 --===
155 % utf-8 patch
155 % utf-8 patch
156 adding description
156 adding description
157 adding utf
157 adding utf
158 % no mime encoding for email --test
158 % no mime encoding for email --test
159 % md5sum of 8-bit output
159 % md5sum of 8-bit output
160 e726c29b3008e77994c7572563e57c34 mailtest
160 e726c29b3008e77994c7572563e57c34 mailtest
161 % mime encoded mbox (base64)
161 % mime encoded mbox (base64)
162 This patch series consists of 1 patches.
162 This patch series consists of 1 patches.
163
163
164
164
165 Writing [PATCH] charset=utf-8; content-transfer-encoding: base64 ...
165 Writing [PATCH] charset=utf-8; content-transfer-encoding: base64 ...
166 From quux Thu Jan 01 00:04:01 1970
166 From quux Thu Jan 01 00:04:01 1970
167 Content-Type: text/plain; charset="utf-8"
167 Content-Type: text/plain; charset="utf-8"
168 MIME-Version: 1.0
168 MIME-Version: 1.0
169 Content-Transfer-Encoding: base64
169 Content-Transfer-Encoding: base64
170 Subject: [PATCH] charset=utf-8; content-transfer-encoding: base64
170 Subject: [PATCH] charset=utf-8; content-transfer-encoding: base64
171 X-Mercurial-Node: c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
171 X-Mercurial-Node: c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
172 Message-Id: <c3c9e37db9f4fe4882cd.240@
172 Message-Id: <c3c9e37db9f4fe4882cd.240@
173 User-Agent: Mercurial-patchbomb
173 User-Agent: Mercurial-patchbomb
174 Date: Thu, 01 Jan 1970 00:04:00 +0000
174 Date: Thu, 01 Jan 1970 00:04:00 +0000
175 From: quux
175 From: quux
176 To: foo
176 To: foo
177 Cc: bar
177 Cc: bar
178
178
179 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIHRlc3QKIyBEYXRlIDQgMAojIE5vZGUgSUQgYzNj
179 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIHRlc3QKIyBEYXRlIDQgMAojIE5vZGUgSUQgYzNj
180 OWUzN2RiOWY0ZmU0ODgyY2RhMzliYWY0MmZlZDZiYWQ4YjE1YQojIFBhcmVudCAgZmYyYzlmYTIw
180 OWUzN2RiOWY0ZmU0ODgyY2RhMzliYWY0MmZlZDZiYWQ4YjE1YQojIFBhcmVudCAgZmYyYzlmYTIw
181 MThiMTVmYTc0YjMzMzYzYmRhOTUyNzMyM2UyYTk5ZgpjaGFyc2V0PXV0Zi04OyBjb250ZW50LXRy
181 MThiMTVmYTc0YjMzMzYzYmRhOTUyNzMyM2UyYTk5ZgpjaGFyc2V0PXV0Zi04OyBjb250ZW50LXRy
182 YW5zZmVyLWVuY29kaW5nOiBiYXNlNjQKCmRpZmYgLXIgZmYyYzlmYTIwMThiIC1yIGMzYzllMzdk
182 YW5zZmVyLWVuY29kaW5nOiBiYXNlNjQKCmRpZmYgLXIgZmYyYzlmYTIwMThiIC1yIGMzYzllMzdk
183 YjlmNCBkZXNjcmlwdGlvbgotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCAr
183 YjlmNCBkZXNjcmlwdGlvbgotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCAr
184 MDAwMAorKysgYi9kZXNjcmlwdGlvbglUaHUgSmFuIDAxIDAwOjAwOjA0IDE5NzAgKzAwMDAKQEAg
184 MDAwMAorKysgYi9kZXNjcmlwdGlvbglUaHUgSmFuIDAxIDAwOjAwOjA0IDE5NzAgKzAwMDAKQEAg
185 LTAsMCArMSwzIEBACithIG11bHRpbGluZQorCitkZXNjcmlwdGlvbgpkaWZmIC1yIGZmMmM5ZmEy
185 LTAsMCArMSwzIEBACithIG11bHRpbGluZQorCitkZXNjcmlwdGlvbgpkaWZmIC1yIGZmMmM5ZmEy
186 MDE4YiAtciBjM2M5ZTM3ZGI5ZjQgdXRmCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDow
186 MDE4YiAtciBjM2M5ZTM3ZGI5ZjQgdXRmCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDow
187 MCAxOTcwICswMDAwCisrKyBiL3V0ZglUaHUgSmFuIDAxIDAwOjAwOjA0IDE5NzAgKzAwMDAKQEAg
187 MCAxOTcwICswMDAwCisrKyBiL3V0ZglUaHUgSmFuIDAxIDAwOjAwOjA0IDE5NzAgKzAwMDAKQEAg
188 LTAsMCArMSwxIEBACitow7ZtbWEhCg==
188 LTAsMCArMSwxIEBACitow7ZtbWEhCg==
189
189
190
190
191 % mime encoded mbox (quoted-printable)
191 % mime encoded mbox (quoted-printable)
192 adding qp
192 adding qp
193 % no mime encoding for email --test
193 % no mime encoding for email --test
194 % md5sum of qp output
194 % md5sum of qp output
195 0402c7d033e04044e423bb04816f9dae mailtest
195 0402c7d033e04044e423bb04816f9dae mailtest
196 % mime encoded mbox (quoted-printable)
196 % mime encoded mbox (quoted-printable)
197 This patch series consists of 1 patches.
197 This patch series consists of 1 patches.
198
198
199
199
200 Writing [PATCH] charset=utf-8; content-transfer-encoding: quoted-printable ...
200 Writing [PATCH] charset=utf-8; content-transfer-encoding: quoted-printable ...
201 From quux Thu Jan 01 00:04:01 1970
201 From quux Thu Jan 01 00:04:01 1970
202 Content-Type: text/plain; charset="us-ascii"
202 Content-Type: text/plain; charset="us-ascii"
203 MIME-Version: 1.0
203 MIME-Version: 1.0
204 Content-Transfer-Encoding: quoted-printable
204 Content-Transfer-Encoding: quoted-printable
205 Subject: [PATCH] charset=utf-8; content-transfer-encoding: quoted-printable
205 Subject: [PATCH] charset=utf-8; content-transfer-encoding: quoted-printable
206 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
206 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
207 Message-Id: <c655633f8c87700bb38c.240@
207 Message-Id: <c655633f8c87700bb38c.240@
208 User-Agent: Mercurial-patchbomb
208 User-Agent: Mercurial-patchbomb
209 Date: Thu, 01 Jan 1970 00:04:00 +0000
209 Date: Thu, 01 Jan 1970 00:04:00 +0000
210 From: quux
210 From: quux
211 To: foo
211 To: foo
212 Cc: bar
212 Cc: bar
213
213
214 # HG changeset patch
214 # HG changeset patch
215 # User test
215 # User test
216 # Date 4 0
216 # Date 4 0
217 # Node ID c655633f8c87700bb38cc6a59a2753bdc5a6c376
217 # Node ID c655633f8c87700bb38cc6a59a2753bdc5a6c376
218 # Parent c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
218 # Parent c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
219 charset=3Dutf-8; content-transfer-encoding: quoted-printable
219 charset=3Dutf-8; content-transfer-encoding: quoted-printable
220
220
221 diff -r c3c9e37db9f4 -r c655633f8c87 qp
221 diff -r c3c9e37db9f4 -r c655633f8c87 qp
222 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
222 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
223 +++ b/qp Thu Jan 01 00:00:04 1970 +0000
223 +++ b/qp Thu Jan 01 00:00:04 1970 +0000
224 @@ -0,0 +1,4 @@
224 @@ -0,0 +1,4 @@
225 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
225 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
226 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
226 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
227 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
227 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
228 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
228 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
229 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
229 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
230 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
230 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
231 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
231 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
232 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
232 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
233 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
233 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
234 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
234 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
235 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
235 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
236 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
236 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
237 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
237 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
238 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
238 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
239 +foo
239 +foo
240 +
240 +
241 +bar
241 +bar
242
242
243
243
244 % iso-8859-1 patch
244 % iso-8859-1 patch
245 adding isolatin
245 adding isolatin
246 % fake ascii mbox
246 % fake ascii mbox
247 This patch series consists of 1 patches.
247 This patch series consists of 1 patches.
248
248
249
249
250 Writing [PATCH] charset=us-ascii; content-transfer-encoding: 8bit ...
250 Writing [PATCH] charset=us-ascii; content-transfer-encoding: 8bit ...
251 % md5sum of 8-bit output
251 % md5sum of 8-bit output
252 9ea043d8fc43a71045114508baed144b mboxfix
252 9ea043d8fc43a71045114508baed144b mboxfix
253 % test diffstat for single patch
253 % test diffstat for single patch
254 This patch series consists of 1 patches.
254 This patch series consists of 1 patches.
255
255
256 c
256 c
257
257
258 c | 1 +
258 c | 1 +
259 1 files changed, 1 insertions(+), 0 deletions(-)
259 1 files changed, 1 insertions(+), 0 deletions(-)
260
260
261
261
262 Displaying [PATCH] test ...
262 Displaying [PATCH] test ...
263 Content-Type: text/plain; charset="us-ascii"
263 Content-Type: text/plain; charset="us-ascii"
264 MIME-Version: 1.0
264 MIME-Version: 1.0
265 Content-Transfer-Encoding: 7bit
265 Content-Transfer-Encoding: 7bit
266 Subject: [PATCH] test
266 Subject: [PATCH] test
267 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
267 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
268 Message-Id: <ff2c9fa2018b15fa74b3.60@
268 Message-Id: <ff2c9fa2018b15fa74b3.60@
269 User-Agent: Mercurial-patchbomb
269 User-Agent: Mercurial-patchbomb
270 Date: Thu, 01 Jan 1970 00:01:00 +0000
270 Date: Thu, 01 Jan 1970 00:01:00 +0000
271 From: quux
271 From: quux
272 To: foo
272 To: foo
273 Cc: bar
273 Cc: bar
274
274
275 c | 1 +
275 c | 1 +
276 1 files changed, 1 insertions(+), 0 deletions(-)
276 1 files changed, 1 insertions(+), 0 deletions(-)
277
277
278
278
279 # HG changeset patch
279 # HG changeset patch
280 # User test
280 # User test
281 # Date 3 0
281 # Date 3 0
282 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
282 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
283 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
283 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
284 c
284 c
285
285
286 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
286 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
287 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
287 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
288 +++ b/c Thu Jan 01 00:00:03 1970 +0000
288 +++ b/c Thu Jan 01 00:00:03 1970 +0000
289 @@ -0,0 +1,1 @@
289 @@ -0,0 +1,1 @@
290 +c
290 +c
291
291
292 % test diffstat for multiple patches
292 % test diffstat for multiple patches
293 This patch series consists of 2 patches.
293 This patch series consists of 2 patches.
294
294
295 a
295 a
296
296
297 a | 1 +
297 a | 1 +
298 1 files changed, 1 insertions(+), 0 deletions(-)
298 1 files changed, 1 insertions(+), 0 deletions(-)
299
299
300 b
300 b
301
301
302 b | 1 +
302 b | 1 +
303 1 files changed, 1 insertions(+), 0 deletions(-)
303 1 files changed, 1 insertions(+), 0 deletions(-)
304
304
305 Final summary:
305 Final summary:
306
306
307 a | 1 +
307 a | 1 +
308 b | 1 +
308 b | 1 +
309 2 files changed, 2 insertions(+), 0 deletions(-)
309 2 files changed, 2 insertions(+), 0 deletions(-)
310
310
311
311
312 Write the introductory message for the patch series.
312 Write the introductory message for the patch series.
313
313
314
314
315 Displaying [PATCH 0 of 2] test ...
315 Displaying [PATCH 0 of 2] test ...
316 Content-Type: text/plain; charset="us-ascii"
316 Content-Type: text/plain; charset="us-ascii"
317 MIME-Version: 1.0
317 MIME-Version: 1.0
318 Content-Transfer-Encoding: 7bit
318 Content-Transfer-Encoding: 7bit
319 Subject: [PATCH 0 of 2] test
319 Subject: [PATCH 0 of 2] test
320 Message-Id: <patchbomb.60@
320 Message-Id: <patchbomb.60@
321 User-Agent: Mercurial-patchbomb
321 User-Agent: Mercurial-patchbomb
322 Date: Thu, 01 Jan 1970 00:01:00 +0000
322 Date: Thu, 01 Jan 1970 00:01:00 +0000
323 From: quux
323 From: quux
324 To: foo
324 To: foo
325 Cc: bar
325 Cc: bar
326
326
327
327
328 a | 1 +
328 a | 1 +
329 b | 1 +
329 b | 1 +
330 2 files changed, 2 insertions(+), 0 deletions(-)
330 2 files changed, 2 insertions(+), 0 deletions(-)
331
331
332 Displaying [PATCH 1 of 2] a ...
332 Displaying [PATCH 1 of 2] a ...
333 Content-Type: text/plain; charset="us-ascii"
333 Content-Type: text/plain; charset="us-ascii"
334 MIME-Version: 1.0
334 MIME-Version: 1.0
335 Content-Transfer-Encoding: 7bit
335 Content-Transfer-Encoding: 7bit
336 Subject: [PATCH 1 of 2] a
336 Subject: [PATCH 1 of 2] a
337 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
337 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
338 Message-Id: <8580ff50825a50c8f716.61@
338 Message-Id: <8580ff50825a50c8f716.61@
339 In-Reply-To: <patchbomb.60@
339 In-Reply-To: <patchbomb.60@
340 References: <patchbomb.60@
340 References: <patchbomb.60@
341 User-Agent: Mercurial-patchbomb
341 User-Agent: Mercurial-patchbomb
342 Date: Thu, 01 Jan 1970 00:01:01 +0000
342 Date: Thu, 01 Jan 1970 00:01:01 +0000
343 From: quux
343 From: quux
344 To: foo
344 To: foo
345 Cc: bar
345 Cc: bar
346
346
347 a | 1 +
347 a | 1 +
348 1 files changed, 1 insertions(+), 0 deletions(-)
348 1 files changed, 1 insertions(+), 0 deletions(-)
349
349
350
350
351 # HG changeset patch
351 # HG changeset patch
352 # User test
352 # User test
353 # Date 1 0
353 # Date 1 0
354 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
354 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
355 # Parent 0000000000000000000000000000000000000000
355 # Parent 0000000000000000000000000000000000000000
356 a
356 a
357
357
358 diff -r 000000000000 -r 8580ff50825a a
358 diff -r 000000000000 -r 8580ff50825a a
359 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
359 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
360 +++ b/a Thu Jan 01 00:00:01 1970 +0000
360 +++ b/a Thu Jan 01 00:00:01 1970 +0000
361 @@ -0,0 +1,1 @@
361 @@ -0,0 +1,1 @@
362 +a
362 +a
363
363
364 Displaying [PATCH 2 of 2] b ...
364 Displaying [PATCH 2 of 2] b ...
365 Content-Type: text/plain; charset="us-ascii"
365 Content-Type: text/plain; charset="us-ascii"
366 MIME-Version: 1.0
366 MIME-Version: 1.0
367 Content-Transfer-Encoding: 7bit
367 Content-Transfer-Encoding: 7bit
368 Subject: [PATCH 2 of 2] b
368 Subject: [PATCH 2 of 2] b
369 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
369 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
370 Message-Id: <97d72e5f12c7e84f8506.62@
370 Message-Id: <97d72e5f12c7e84f8506.62@
371 In-Reply-To: <patchbomb.60@
371 In-Reply-To: <patchbomb.60@
372 References: <patchbomb.60@
372 References: <patchbomb.60@
373 User-Agent: Mercurial-patchbomb
373 User-Agent: Mercurial-patchbomb
374 Date: Thu, 01 Jan 1970 00:01:02 +0000
374 Date: Thu, 01 Jan 1970 00:01:02 +0000
375 From: quux
375 From: quux
376 To: foo
376 To: foo
377 Cc: bar
377 Cc: bar
378
378
379 b | 1 +
379 b | 1 +
380 1 files changed, 1 insertions(+), 0 deletions(-)
380 1 files changed, 1 insertions(+), 0 deletions(-)
381
381
382
382
383 # HG changeset patch
383 # HG changeset patch
384 # User test
384 # User test
385 # Date 2 0
385 # Date 2 0
386 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
386 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
387 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
387 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
388 b
388 b
389
389
390 diff -r 8580ff50825a -r 97d72e5f12c7 b
390 diff -r 8580ff50825a -r 97d72e5f12c7 b
391 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
391 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
392 +++ b/b Thu Jan 01 00:00:02 1970 +0000
392 +++ b/b Thu Jan 01 00:00:02 1970 +0000
393 @@ -0,0 +1,1 @@
393 @@ -0,0 +1,1 @@
394 +b
394 +b
395
395
396 % test inline for single patch
396 % test inline for single patch
397 This patch series consists of 1 patches.
397 This patch series consists of 1 patches.
398
398
399
399
400 Displaying [PATCH] test ...
400 Displaying [PATCH] test ...
401 Content-Type: multipart/mixed; boundary="===
401 Content-Type: multipart/mixed; boundary="===
402 MIME-Version: 1.0
402 MIME-Version: 1.0
403 Subject: [PATCH] test
403 Subject: [PATCH] test
404 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
404 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
405 Message-Id: <ff2c9fa2018b15fa74b3.60@
405 Message-Id: <ff2c9fa2018b15fa74b3.60@
406 User-Agent: Mercurial-patchbomb
406 User-Agent: Mercurial-patchbomb
407 Date: Thu, 01 Jan 1970 00:01:00 +0000
407 Date: Thu, 01 Jan 1970 00:01:00 +0000
408 From: quux
408 From: quux
409 To: foo
409 To: foo
410 Cc: bar
410 Cc: bar
411
411
412 --===
412 --===
413 Content-Type: text/x-patch; charset="us-ascii"
413 Content-Type: text/x-patch; charset="us-ascii"
414 MIME-Version: 1.0
414 MIME-Version: 1.0
415 Content-Transfer-Encoding: 7bit
415 Content-Transfer-Encoding: 7bit
416 Content-Disposition: inline; filename=t2.patch
416 Content-Disposition: inline; filename=t2.patch
417
417
418 # HG changeset patch
418 # HG changeset patch
419 # User test
419 # User test
420 # Date 3 0
420 # Date 3 0
421 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
421 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
422 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
422 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
423 c
423 c
424
424
425 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
425 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
426 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
426 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
427 +++ b/c Thu Jan 01 00:00:03 1970 +0000
427 +++ b/c Thu Jan 01 00:00:03 1970 +0000
428 @@ -0,0 +1,1 @@
428 @@ -0,0 +1,1 @@
429 +c
429 +c
430
430
431 --===
431 --===
432 % test inline for single patch (quoted-printable)
432 % test inline for single patch (quoted-printable)
433 This patch series consists of 1 patches.
433 This patch series consists of 1 patches.
434
434
435
435
436 Displaying [PATCH] test ...
436 Displaying [PATCH] test ...
437 Content-Type: multipart/mixed; boundary="===
437 Content-Type: multipart/mixed; boundary="===
438 MIME-Version: 1.0
438 MIME-Version: 1.0
439 Subject: [PATCH] test
439 Subject: [PATCH] test
440 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
440 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
441 Message-Id: <c655633f8c87700bb38c.60@
441 Message-Id: <c655633f8c87700bb38c.60@
442 User-Agent: Mercurial-patchbomb
442 User-Agent: Mercurial-patchbomb
443 Date: Thu, 01 Jan 1970 00:01:00 +0000
443 Date: Thu, 01 Jan 1970 00:01:00 +0000
444 From: quux
444 From: quux
445 To: foo
445 To: foo
446 Cc: bar
446 Cc: bar
447
447
448 --===
448 --===
449 Content-Type: text/x-patch; charset="us-ascii"
449 Content-Type: text/x-patch; charset="us-ascii"
450 MIME-Version: 1.0
450 MIME-Version: 1.0
451 Content-Transfer-Encoding: quoted-printable
451 Content-Transfer-Encoding: quoted-printable
452 Content-Disposition: inline; filename=t2.patch
452 Content-Disposition: inline; filename=t2.patch
453
453
454 # HG changeset patch
454 # HG changeset patch
455 # User test
455 # User test
456 # Date 4 0
456 # Date 4 0
457 # Node ID c655633f8c87700bb38cc6a59a2753bdc5a6c376
457 # Node ID c655633f8c87700bb38cc6a59a2753bdc5a6c376
458 # Parent c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
458 # Parent c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
459 charset=3Dutf-8; content-transfer-encoding: quoted-printable
459 charset=3Dutf-8; content-transfer-encoding: quoted-printable
460
460
461 diff -r c3c9e37db9f4 -r c655633f8c87 qp
461 diff -r c3c9e37db9f4 -r c655633f8c87 qp
462 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
462 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
463 +++ b/qp Thu Jan 01 00:00:04 1970 +0000
463 +++ b/qp Thu Jan 01 00:00:04 1970 +0000
464 @@ -0,0 +1,4 @@
464 @@ -0,0 +1,4 @@
465 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
465 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
466 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
466 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
467 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
467 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
468 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
468 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
469 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
469 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
470 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
470 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
471 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
471 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
472 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
472 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
473 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
473 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
474 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
474 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
475 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
475 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
476 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
476 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
477 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
477 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
478 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
478 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
479 +foo
479 +foo
480 +
480 +
481 +bar
481 +bar
482
482
483 --===
483 --===
484 % test inline for multiple patches
484 % test inline for multiple patches
485 This patch series consists of 3 patches.
485 This patch series consists of 3 patches.
486
486
487
487
488 Write the introductory message for the patch series.
488 Write the introductory message for the patch series.
489
489
490
490
491 Displaying [PATCH 0 of 3] test ...
491 Displaying [PATCH 0 of 3] test ...
492 Content-Type: text/plain; charset="us-ascii"
492 Content-Type: text/plain; charset="us-ascii"
493 MIME-Version: 1.0
493 MIME-Version: 1.0
494 Content-Transfer-Encoding: 7bit
494 Content-Transfer-Encoding: 7bit
495 Subject: [PATCH 0 of 3] test
495 Subject: [PATCH 0 of 3] test
496 Message-Id: <patchbomb.60@
496 Message-Id: <patchbomb.60@
497 User-Agent: Mercurial-patchbomb
497 User-Agent: Mercurial-patchbomb
498 Date: Thu, 01 Jan 1970 00:01:00 +0000
498 Date: Thu, 01 Jan 1970 00:01:00 +0000
499 From: quux
499 From: quux
500 To: foo
500 To: foo
501 Cc: bar
501 Cc: bar
502
502
503
503
504 Displaying [PATCH 1 of 3] a ...
504 Displaying [PATCH 1 of 3] a ...
505 Content-Type: multipart/mixed; boundary="===
505 Content-Type: multipart/mixed; boundary="===
506 MIME-Version: 1.0
506 MIME-Version: 1.0
507 Subject: [PATCH 1 of 3] a
507 Subject: [PATCH 1 of 3] a
508 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
508 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
509 Message-Id: <8580ff50825a50c8f716.61@
509 Message-Id: <8580ff50825a50c8f716.61@
510 In-Reply-To: <patchbomb.60@
510 In-Reply-To: <patchbomb.60@
511 References: <patchbomb.60@
511 References: <patchbomb.60@
512 User-Agent: Mercurial-patchbomb
512 User-Agent: Mercurial-patchbomb
513 Date: Thu, 01 Jan 1970 00:01:01 +0000
513 Date: Thu, 01 Jan 1970 00:01:01 +0000
514 From: quux
514 From: quux
515 To: foo
515 To: foo
516 Cc: bar
516 Cc: bar
517
517
518 --===
518 --===
519 Content-Type: text/x-patch; charset="us-ascii"
519 Content-Type: text/x-patch; charset="us-ascii"
520 MIME-Version: 1.0
520 MIME-Version: 1.0
521 Content-Transfer-Encoding: 7bit
521 Content-Transfer-Encoding: 7bit
522 Content-Disposition: inline; filename=t2-1.patch
522 Content-Disposition: inline; filename=t2-1.patch
523
523
524 # HG changeset patch
524 # HG changeset patch
525 # User test
525 # User test
526 # Date 1 0
526 # Date 1 0
527 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
527 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
528 # Parent 0000000000000000000000000000000000000000
528 # Parent 0000000000000000000000000000000000000000
529 a
529 a
530
530
531 diff -r 000000000000 -r 8580ff50825a a
531 diff -r 000000000000 -r 8580ff50825a a
532 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
532 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
533 +++ b/a Thu Jan 01 00:00:01 1970 +0000
533 +++ b/a Thu Jan 01 00:00:01 1970 +0000
534 @@ -0,0 +1,1 @@
534 @@ -0,0 +1,1 @@
535 +a
535 +a
536
536
537 --===
537 --===
538 Displaying [PATCH 2 of 3] b ...
538 Displaying [PATCH 2 of 3] b ...
539 Content-Type: multipart/mixed; boundary="===
539 Content-Type: multipart/mixed; boundary="===
540 MIME-Version: 1.0
540 MIME-Version: 1.0
541 Subject: [PATCH 2 of 3] b
541 Subject: [PATCH 2 of 3] b
542 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
542 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
543 Message-Id: <97d72e5f12c7e84f8506.62@
543 Message-Id: <97d72e5f12c7e84f8506.62@
544 In-Reply-To: <patchbomb.60@
544 In-Reply-To: <patchbomb.60@
545 References: <patchbomb.60@
545 References: <patchbomb.60@
546 User-Agent: Mercurial-patchbomb
546 User-Agent: Mercurial-patchbomb
547 Date: Thu, 01 Jan 1970 00:01:02 +0000
547 Date: Thu, 01 Jan 1970 00:01:02 +0000
548 From: quux
548 From: quux
549 To: foo
549 To: foo
550 Cc: bar
550 Cc: bar
551
551
552 --===
552 --===
553 Content-Type: text/x-patch; charset="us-ascii"
553 Content-Type: text/x-patch; charset="us-ascii"
554 MIME-Version: 1.0
554 MIME-Version: 1.0
555 Content-Transfer-Encoding: 7bit
555 Content-Transfer-Encoding: 7bit
556 Content-Disposition: inline; filename=t2-2.patch
556 Content-Disposition: inline; filename=t2-2.patch
557
557
558 # HG changeset patch
558 # HG changeset patch
559 # User test
559 # User test
560 # Date 2 0
560 # Date 2 0
561 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
561 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
562 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
562 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
563 b
563 b
564
564
565 diff -r 8580ff50825a -r 97d72e5f12c7 b
565 diff -r 8580ff50825a -r 97d72e5f12c7 b
566 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
566 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
567 +++ b/b Thu Jan 01 00:00:02 1970 +0000
567 +++ b/b Thu Jan 01 00:00:02 1970 +0000
568 @@ -0,0 +1,1 @@
568 @@ -0,0 +1,1 @@
569 +b
569 +b
570
570
571 --===
571 --===
572 Displaying [PATCH 3 of 3] charset=utf-8; content-transfer-encoding: quoted-printable ...
572 Displaying [PATCH 3 of 3] charset=utf-8; content-transfer-encoding: quoted-printable ...
573 Content-Type: multipart/mixed; boundary="===
573 Content-Type: multipart/mixed; boundary="===
574 MIME-Version: 1.0
574 MIME-Version: 1.0
575 Subject: [PATCH 3 of 3] charset=utf-8;
575 Subject: [PATCH 3 of 3] charset=utf-8;
576 content-transfer-encoding: quoted-printable
576 content-transfer-encoding: quoted-printable
577 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
577 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
578 Message-Id: <c655633f8c87700bb38c.63@
578 Message-Id: <c655633f8c87700bb38c.63@
579 In-Reply-To: <patchbomb.60@
579 In-Reply-To: <patchbomb.60@
580 References: <patchbomb.60@
580 References: <patchbomb.60@
581 User-Agent: Mercurial-patchbomb
581 User-Agent: Mercurial-patchbomb
582 Date: Thu, 01 Jan 1970 00:01:03 +0000
582 Date: Thu, 01 Jan 1970 00:01:03 +0000
583 From: quux
583 From: quux
584 To: foo
584 To: foo
585 Cc: bar
585 Cc: bar
586
586
587 --===
587 --===
588 Content-Type: text/x-patch; charset="us-ascii"
588 Content-Type: text/x-patch; charset="us-ascii"
589 MIME-Version: 1.0
589 MIME-Version: 1.0
590 Content-Transfer-Encoding: quoted-printable
590 Content-Transfer-Encoding: quoted-printable
591 Content-Disposition: inline; filename=t2-3.patch
591 Content-Disposition: inline; filename=t2-3.patch
592
592
593 # HG changeset patch
593 # HG changeset patch
594 # User test
594 # User test
595 # Date 4 0
595 # Date 4 0
596 # Node ID c655633f8c87700bb38cc6a59a2753bdc5a6c376
596 # Node ID c655633f8c87700bb38cc6a59a2753bdc5a6c376
597 # Parent c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
597 # Parent c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
598 charset=3Dutf-8; content-transfer-encoding: quoted-printable
598 charset=3Dutf-8; content-transfer-encoding: quoted-printable
599
599
600 diff -r c3c9e37db9f4 -r c655633f8c87 qp
600 diff -r c3c9e37db9f4 -r c655633f8c87 qp
601 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
601 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
602 +++ b/qp Thu Jan 01 00:00:04 1970 +0000
602 +++ b/qp Thu Jan 01 00:00:04 1970 +0000
603 @@ -0,0 +1,4 @@
603 @@ -0,0 +1,4 @@
604 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
604 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
605 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
605 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
606 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
606 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
607 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
607 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
608 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
608 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
609 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
609 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
610 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
610 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
611 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
611 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
612 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
612 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
613 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
613 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
614 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
614 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
615 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
615 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
616 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
616 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
617 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
617 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
618 +foo
618 +foo
619 +
619 +
620 +bar
620 +bar
621
621
622 --===
622 --===
623 % test attach for single patch
623 % test attach for single patch
624 This patch series consists of 1 patches.
624 This patch series consists of 1 patches.
625
625
626
626
627 Displaying [PATCH] test ...
627 Displaying [PATCH] test ...
628 Content-Type: multipart/mixed; boundary="===
628 Content-Type: multipart/mixed; boundary="===
629 MIME-Version: 1.0
629 MIME-Version: 1.0
630 Subject: [PATCH] test
630 Subject: [PATCH] test
631 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
631 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
632 Message-Id: <ff2c9fa2018b15fa74b3.60@
632 Message-Id: <ff2c9fa2018b15fa74b3.60@
633 User-Agent: Mercurial-patchbomb
633 User-Agent: Mercurial-patchbomb
634 Date: Thu, 01 Jan 1970 00:01:00 +0000
634 Date: Thu, 01 Jan 1970 00:01:00 +0000
635 From: quux
635 From: quux
636 To: foo
636 To: foo
637 Cc: bar
637 Cc: bar
638
638
639 --===
639 --===
640 Content-Type: text/plain; charset="us-ascii"
640 Content-Type: text/plain; charset="us-ascii"
641 MIME-Version: 1.0
641 MIME-Version: 1.0
642 Content-Transfer-Encoding: 7bit
642 Content-Transfer-Encoding: 7bit
643
643
644 Patch subject is complete summary.
644 Patch subject is complete summary.
645
645
646
646
647
647
648 --===
648 --===
649 Content-Type: text/x-patch; charset="us-ascii"
649 Content-Type: text/x-patch; charset="us-ascii"
650 MIME-Version: 1.0
650 MIME-Version: 1.0
651 Content-Transfer-Encoding: 7bit
651 Content-Transfer-Encoding: 7bit
652 Content-Disposition: attachment; filename=t2.patch
652 Content-Disposition: attachment; filename=t2.patch
653
653
654 # HG changeset patch
654 # HG changeset patch
655 # User test
655 # User test
656 # Date 3 0
656 # Date 3 0
657 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
657 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
658 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
658 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
659 c
659 c
660
660
661 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
661 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
662 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
662 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
663 +++ b/c Thu Jan 01 00:00:03 1970 +0000
663 +++ b/c Thu Jan 01 00:00:03 1970 +0000
664 @@ -0,0 +1,1 @@
664 @@ -0,0 +1,1 @@
665 +c
665 +c
666
666
667 --===
667 --===
668 % test attach for single patch (quoted-printable)
668 % test attach for single patch (quoted-printable)
669 This patch series consists of 1 patches.
669 This patch series consists of 1 patches.
670
670
671
671
672 Displaying [PATCH] test ...
672 Displaying [PATCH] test ...
673 Content-Type: multipart/mixed; boundary="===
673 Content-Type: multipart/mixed; boundary="===
674 MIME-Version: 1.0
674 MIME-Version: 1.0
675 Subject: [PATCH] test
675 Subject: [PATCH] test
676 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
676 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
677 Message-Id: <c655633f8c87700bb38c.60@
677 Message-Id: <c655633f8c87700bb38c.60@
678 User-Agent: Mercurial-patchbomb
678 User-Agent: Mercurial-patchbomb
679 Date: Thu, 01 Jan 1970 00:01:00 +0000
679 Date: Thu, 01 Jan 1970 00:01:00 +0000
680 From: quux
680 From: quux
681 To: foo
681 To: foo
682 Cc: bar
682 Cc: bar
683
683
684 --===
684 --===
685 Content-Type: text/plain; charset="us-ascii"
685 Content-Type: text/plain; charset="us-ascii"
686 MIME-Version: 1.0
686 MIME-Version: 1.0
687 Content-Transfer-Encoding: 7bit
687 Content-Transfer-Encoding: 7bit
688
688
689 Patch subject is complete summary.
689 Patch subject is complete summary.
690
690
691
691
692
692
693 --===
693 --===
694 Content-Type: text/x-patch; charset="us-ascii"
694 Content-Type: text/x-patch; charset="us-ascii"
695 MIME-Version: 1.0
695 MIME-Version: 1.0
696 Content-Transfer-Encoding: quoted-printable
696 Content-Transfer-Encoding: quoted-printable
697 Content-Disposition: attachment; filename=t2.patch
697 Content-Disposition: attachment; filename=t2.patch
698
698
699 # HG changeset patch
699 # HG changeset patch
700 # User test
700 # User test
701 # Date 4 0
701 # Date 4 0
702 # Node ID c655633f8c87700bb38cc6a59a2753bdc5a6c376
702 # Node ID c655633f8c87700bb38cc6a59a2753bdc5a6c376
703 # Parent c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
703 # Parent c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
704 charset=3Dutf-8; content-transfer-encoding: quoted-printable
704 charset=3Dutf-8; content-transfer-encoding: quoted-printable
705
705
706 diff -r c3c9e37db9f4 -r c655633f8c87 qp
706 diff -r c3c9e37db9f4 -r c655633f8c87 qp
707 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
707 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
708 +++ b/qp Thu Jan 01 00:00:04 1970 +0000
708 +++ b/qp Thu Jan 01 00:00:04 1970 +0000
709 @@ -0,0 +1,4 @@
709 @@ -0,0 +1,4 @@
710 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
710 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
711 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
711 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
712 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
712 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
713 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
713 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
714 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
714 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
715 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
715 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
716 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
716 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
717 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
717 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
718 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
718 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
719 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
719 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
720 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
720 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
721 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
721 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
722 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
722 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
723 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
723 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
724 +foo
724 +foo
725 +
725 +
726 +bar
726 +bar
727
727
728 --===
728 --===
729 % test attach for multiple patches
729 % test attach for multiple patches
730 This patch series consists of 3 patches.
730 This patch series consists of 3 patches.
731
731
732
732
733 Write the introductory message for the patch series.
733 Write the introductory message for the patch series.
734
734
735
735
736 Displaying [PATCH 0 of 3] test ...
736 Displaying [PATCH 0 of 3] test ...
737 Content-Type: text/plain; charset="us-ascii"
737 Content-Type: text/plain; charset="us-ascii"
738 MIME-Version: 1.0
738 MIME-Version: 1.0
739 Content-Transfer-Encoding: 7bit
739 Content-Transfer-Encoding: 7bit
740 Subject: [PATCH 0 of 3] test
740 Subject: [PATCH 0 of 3] test
741 Message-Id: <patchbomb.60@
741 Message-Id: <patchbomb.60@
742 User-Agent: Mercurial-patchbomb
742 User-Agent: Mercurial-patchbomb
743 Date: Thu, 01 Jan 1970 00:01:00 +0000
743 Date: Thu, 01 Jan 1970 00:01:00 +0000
744 From: quux
744 From: quux
745 To: foo
745 To: foo
746 Cc: bar
746 Cc: bar
747
747
748
748
749 Displaying [PATCH 1 of 3] a ...
749 Displaying [PATCH 1 of 3] a ...
750 Content-Type: multipart/mixed; boundary="===
750 Content-Type: multipart/mixed; boundary="===
751 MIME-Version: 1.0
751 MIME-Version: 1.0
752 Subject: [PATCH 1 of 3] a
752 Subject: [PATCH 1 of 3] a
753 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
753 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
754 Message-Id: <8580ff50825a50c8f716.61@
754 Message-Id: <8580ff50825a50c8f716.61@
755 In-Reply-To: <patchbomb.60@
755 In-Reply-To: <patchbomb.60@
756 References: <patchbomb.60@
756 References: <patchbomb.60@
757 User-Agent: Mercurial-patchbomb
757 User-Agent: Mercurial-patchbomb
758 Date: Thu, 01 Jan 1970 00:01:01 +0000
758 Date: Thu, 01 Jan 1970 00:01:01 +0000
759 From: quux
759 From: quux
760 To: foo
760 To: foo
761 Cc: bar
761 Cc: bar
762
762
763 --===
763 --===
764 Content-Type: text/plain; charset="us-ascii"
764 Content-Type: text/plain; charset="us-ascii"
765 MIME-Version: 1.0
765 MIME-Version: 1.0
766 Content-Transfer-Encoding: 7bit
766 Content-Transfer-Encoding: 7bit
767
767
768 Patch subject is complete summary.
768 Patch subject is complete summary.
769
769
770
770
771
771
772 --===
772 --===
773 Content-Type: text/x-patch; charset="us-ascii"
773 Content-Type: text/x-patch; charset="us-ascii"
774 MIME-Version: 1.0
774 MIME-Version: 1.0
775 Content-Transfer-Encoding: 7bit
775 Content-Transfer-Encoding: 7bit
776 Content-Disposition: attachment; filename=t2-1.patch
776 Content-Disposition: attachment; filename=t2-1.patch
777
777
778 # HG changeset patch
778 # HG changeset patch
779 # User test
779 # User test
780 # Date 1 0
780 # Date 1 0
781 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
781 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
782 # Parent 0000000000000000000000000000000000000000
782 # Parent 0000000000000000000000000000000000000000
783 a
783 a
784
784
785 diff -r 000000000000 -r 8580ff50825a a
785 diff -r 000000000000 -r 8580ff50825a a
786 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
786 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
787 +++ b/a Thu Jan 01 00:00:01 1970 +0000
787 +++ b/a Thu Jan 01 00:00:01 1970 +0000
788 @@ -0,0 +1,1 @@
788 @@ -0,0 +1,1 @@
789 +a
789 +a
790
790
791 --===
791 --===
792 Displaying [PATCH 2 of 3] b ...
792 Displaying [PATCH 2 of 3] b ...
793 Content-Type: multipart/mixed; boundary="===
793 Content-Type: multipart/mixed; boundary="===
794 MIME-Version: 1.0
794 MIME-Version: 1.0
795 Subject: [PATCH 2 of 3] b
795 Subject: [PATCH 2 of 3] b
796 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
796 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
797 Message-Id: <97d72e5f12c7e84f8506.62@
797 Message-Id: <97d72e5f12c7e84f8506.62@
798 In-Reply-To: <patchbomb.60@
798 In-Reply-To: <patchbomb.60@
799 References: <patchbomb.60@
799 References: <patchbomb.60@
800 User-Agent: Mercurial-patchbomb
800 User-Agent: Mercurial-patchbomb
801 Date: Thu, 01 Jan 1970 00:01:02 +0000
801 Date: Thu, 01 Jan 1970 00:01:02 +0000
802 From: quux
802 From: quux
803 To: foo
803 To: foo
804 Cc: bar
804 Cc: bar
805
805
806 --===
806 --===
807 Content-Type: text/plain; charset="us-ascii"
807 Content-Type: text/plain; charset="us-ascii"
808 MIME-Version: 1.0
808 MIME-Version: 1.0
809 Content-Transfer-Encoding: 7bit
809 Content-Transfer-Encoding: 7bit
810
810
811 Patch subject is complete summary.
811 Patch subject is complete summary.
812
812
813
813
814
814
815 --===
815 --===
816 Content-Type: text/x-patch; charset="us-ascii"
816 Content-Type: text/x-patch; charset="us-ascii"
817 MIME-Version: 1.0
817 MIME-Version: 1.0
818 Content-Transfer-Encoding: 7bit
818 Content-Transfer-Encoding: 7bit
819 Content-Disposition: attachment; filename=t2-2.patch
819 Content-Disposition: attachment; filename=t2-2.patch
820
820
821 # HG changeset patch
821 # HG changeset patch
822 # User test
822 # User test
823 # Date 2 0
823 # Date 2 0
824 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
824 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
825 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
825 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
826 b
826 b
827
827
828 diff -r 8580ff50825a -r 97d72e5f12c7 b
828 diff -r 8580ff50825a -r 97d72e5f12c7 b
829 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
829 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
830 +++ b/b Thu Jan 01 00:00:02 1970 +0000
830 +++ b/b Thu Jan 01 00:00:02 1970 +0000
831 @@ -0,0 +1,1 @@
831 @@ -0,0 +1,1 @@
832 +b
832 +b
833
833
834 --===
834 --===
835 Displaying [PATCH 3 of 3] charset=utf-8; content-transfer-encoding: quoted-printable ...
835 Displaying [PATCH 3 of 3] charset=utf-8; content-transfer-encoding: quoted-printable ...
836 Content-Type: multipart/mixed; boundary="===
836 Content-Type: multipart/mixed; boundary="===
837 MIME-Version: 1.0
837 MIME-Version: 1.0
838 Subject: [PATCH 3 of 3] charset=utf-8;
838 Subject: [PATCH 3 of 3] charset=utf-8;
839 content-transfer-encoding: quoted-printable
839 content-transfer-encoding: quoted-printable
840 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
840 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
841 Message-Id: <c655633f8c87700bb38c.63@
841 Message-Id: <c655633f8c87700bb38c.63@
842 In-Reply-To: <patchbomb.60@
842 In-Reply-To: <patchbomb.60@
843 References: <patchbomb.60@
843 References: <patchbomb.60@
844 User-Agent: Mercurial-patchbomb
844 User-Agent: Mercurial-patchbomb
845 Date: Thu, 01 Jan 1970 00:01:03 +0000
845 Date: Thu, 01 Jan 1970 00:01:03 +0000
846 From: quux
846 From: quux
847 To: foo
847 To: foo
848 Cc: bar
848 Cc: bar
849
849
850 --===
850 --===
851 Content-Type: text/plain; charset="us-ascii"
851 Content-Type: text/plain; charset="us-ascii"
852 MIME-Version: 1.0
852 MIME-Version: 1.0
853 Content-Transfer-Encoding: 7bit
853 Content-Transfer-Encoding: 7bit
854
854
855 Patch subject is complete summary.
855 Patch subject is complete summary.
856
856
857
857
858
858
859 --===
859 --===
860 Content-Type: text/x-patch; charset="us-ascii"
860 Content-Type: text/x-patch; charset="us-ascii"
861 MIME-Version: 1.0
861 MIME-Version: 1.0
862 Content-Transfer-Encoding: quoted-printable
862 Content-Transfer-Encoding: quoted-printable
863 Content-Disposition: attachment; filename=t2-3.patch
863 Content-Disposition: attachment; filename=t2-3.patch
864
864
865 # HG changeset patch
865 # HG changeset patch
866 # User test
866 # User test
867 # Date 4 0
867 # Date 4 0
868 # Node ID c655633f8c87700bb38cc6a59a2753bdc5a6c376
868 # Node ID c655633f8c87700bb38cc6a59a2753bdc5a6c376
869 # Parent c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
869 # Parent c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
870 charset=3Dutf-8; content-transfer-encoding: quoted-printable
870 charset=3Dutf-8; content-transfer-encoding: quoted-printable
871
871
872 diff -r c3c9e37db9f4 -r c655633f8c87 qp
872 diff -r c3c9e37db9f4 -r c655633f8c87 qp
873 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
873 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
874 +++ b/qp Thu Jan 01 00:00:04 1970 +0000
874 +++ b/qp Thu Jan 01 00:00:04 1970 +0000
875 @@ -0,0 +1,4 @@
875 @@ -0,0 +1,4 @@
876 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
876 +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
877 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
877 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
878 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
878 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
879 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
879 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
880 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
880 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
881 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
881 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
882 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
882 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
883 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
883 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
884 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
884 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
885 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
885 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
886 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
886 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
887 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
887 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
888 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
888 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
889 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
889 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
890 +foo
890 +foo
891 +
891 +
892 +bar
892 +bar
893
893
894 --===
894 --===
895 % test intro for single patch
895 % test intro for single patch
896 This patch series consists of 1 patches.
896 This patch series consists of 1 patches.
897
897
898
898
899 Write the introductory message for the patch series.
899 Write the introductory message for the patch series.
900
900
901
901
902 Displaying [PATCH 0 of 1] test ...
902 Displaying [PATCH 0 of 1] test ...
903 Content-Type: text/plain; charset="us-ascii"
903 Content-Type: text/plain; charset="us-ascii"
904 MIME-Version: 1.0
904 MIME-Version: 1.0
905 Content-Transfer-Encoding: 7bit
905 Content-Transfer-Encoding: 7bit
906 Subject: [PATCH 0 of 1] test
906 Subject: [PATCH 0 of 1] test
907 Message-Id: <patchbomb.60@
907 Message-Id: <patchbomb.60@
908 User-Agent: Mercurial-patchbomb
908 User-Agent: Mercurial-patchbomb
909 Date: Thu, 01 Jan 1970 00:01:00 +0000
909 Date: Thu, 01 Jan 1970 00:01:00 +0000
910 From: quux
910 From: quux
911 To: foo
911 To: foo
912 Cc: bar
912 Cc: bar
913
913
914
914
915 Displaying [PATCH 1 of 1] c ...
915 Displaying [PATCH 1 of 1] c ...
916 Content-Type: text/plain; charset="us-ascii"
916 Content-Type: text/plain; charset="us-ascii"
917 MIME-Version: 1.0
917 MIME-Version: 1.0
918 Content-Transfer-Encoding: 7bit
918 Content-Transfer-Encoding: 7bit
919 Subject: [PATCH 1 of 1] c
919 Subject: [PATCH 1 of 1] c
920 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
920 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
921 Message-Id: <ff2c9fa2018b15fa74b3.61@
921 Message-Id: <ff2c9fa2018b15fa74b3.61@
922 In-Reply-To: <patchbomb.60@
922 In-Reply-To: <patchbomb.60@
923 References: <patchbomb.60@
923 References: <patchbomb.60@
924 User-Agent: Mercurial-patchbomb
924 User-Agent: Mercurial-patchbomb
925 Date: Thu, 01 Jan 1970 00:01:01 +0000
925 Date: Thu, 01 Jan 1970 00:01:01 +0000
926 From: quux
926 From: quux
927 To: foo
927 To: foo
928 Cc: bar
928 Cc: bar
929
929
930 # HG changeset patch
930 # HG changeset patch
931 # User test
931 # User test
932 # Date 3 0
932 # Date 3 0
933 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
933 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
934 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
934 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
935 c
935 c
936
936
937 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
937 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
938 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
938 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
939 +++ b/c Thu Jan 01 00:00:03 1970 +0000
939 +++ b/c Thu Jan 01 00:00:03 1970 +0000
940 @@ -0,0 +1,1 @@
940 @@ -0,0 +1,1 @@
941 +c
941 +c
942
942
943 % test intro for multiple patches
943 % test intro for multiple patches
944 This patch series consists of 2 patches.
944 This patch series consists of 2 patches.
945
945
946
946
947 Write the introductory message for the patch series.
947 Write the introductory message for the patch series.
948
948
949
949
950 Displaying [PATCH 0 of 2] test ...
950 Displaying [PATCH 0 of 2] test ...
951 Content-Type: text/plain; charset="us-ascii"
951 Content-Type: text/plain; charset="us-ascii"
952 MIME-Version: 1.0
952 MIME-Version: 1.0
953 Content-Transfer-Encoding: 7bit
953 Content-Transfer-Encoding: 7bit
954 Subject: [PATCH 0 of 2] test
954 Subject: [PATCH 0 of 2] test
955 Message-Id: <patchbomb.60@
955 Message-Id: <patchbomb.60@
956 User-Agent: Mercurial-patchbomb
956 User-Agent: Mercurial-patchbomb
957 Date: Thu, 01 Jan 1970 00:01:00 +0000
957 Date: Thu, 01 Jan 1970 00:01:00 +0000
958 From: quux
958 From: quux
959 To: foo
959 To: foo
960 Cc: bar
960 Cc: bar
961
961
962
962
963 Displaying [PATCH 1 of 2] a ...
963 Displaying [PATCH 1 of 2] a ...
964 Content-Type: text/plain; charset="us-ascii"
964 Content-Type: text/plain; charset="us-ascii"
965 MIME-Version: 1.0
965 MIME-Version: 1.0
966 Content-Transfer-Encoding: 7bit
966 Content-Transfer-Encoding: 7bit
967 Subject: [PATCH 1 of 2] a
967 Subject: [PATCH 1 of 2] a
968 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
968 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
969 Message-Id: <8580ff50825a50c8f716.61@
969 Message-Id: <8580ff50825a50c8f716.61@
970 In-Reply-To: <patchbomb.60@
970 In-Reply-To: <patchbomb.60@
971 References: <patchbomb.60@
971 References: <patchbomb.60@
972 User-Agent: Mercurial-patchbomb
972 User-Agent: Mercurial-patchbomb
973 Date: Thu, 01 Jan 1970 00:01:01 +0000
973 Date: Thu, 01 Jan 1970 00:01:01 +0000
974 From: quux
974 From: quux
975 To: foo
975 To: foo
976 Cc: bar
976 Cc: bar
977
977
978 # HG changeset patch
978 # HG changeset patch
979 # User test
979 # User test
980 # Date 1 0
980 # Date 1 0
981 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
981 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
982 # Parent 0000000000000000000000000000000000000000
982 # Parent 0000000000000000000000000000000000000000
983 a
983 a
984
984
985 diff -r 000000000000 -r 8580ff50825a a
985 diff -r 000000000000 -r 8580ff50825a a
986 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
986 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
987 +++ b/a Thu Jan 01 00:00:01 1970 +0000
987 +++ b/a Thu Jan 01 00:00:01 1970 +0000
988 @@ -0,0 +1,1 @@
988 @@ -0,0 +1,1 @@
989 +a
989 +a
990
990
991 Displaying [PATCH 2 of 2] b ...
991 Displaying [PATCH 2 of 2] b ...
992 Content-Type: text/plain; charset="us-ascii"
992 Content-Type: text/plain; charset="us-ascii"
993 MIME-Version: 1.0
993 MIME-Version: 1.0
994 Content-Transfer-Encoding: 7bit
994 Content-Transfer-Encoding: 7bit
995 Subject: [PATCH 2 of 2] b
995 Subject: [PATCH 2 of 2] b
996 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
996 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
997 Message-Id: <97d72e5f12c7e84f8506.62@
997 Message-Id: <97d72e5f12c7e84f8506.62@
998 In-Reply-To: <patchbomb.60@
998 In-Reply-To: <patchbomb.60@
999 References: <patchbomb.60@
999 References: <patchbomb.60@
1000 User-Agent: Mercurial-patchbomb
1000 User-Agent: Mercurial-patchbomb
1001 Date: Thu, 01 Jan 1970 00:01:02 +0000
1001 Date: Thu, 01 Jan 1970 00:01:02 +0000
1002 From: quux
1002 From: quux
1003 To: foo
1003 To: foo
1004 Cc: bar
1004 Cc: bar
1005
1005
1006 # HG changeset patch
1006 # HG changeset patch
1007 # User test
1007 # User test
1008 # Date 2 0
1008 # Date 2 0
1009 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1009 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1010 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1010 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1011 b
1011 b
1012
1012
1013 diff -r 8580ff50825a -r 97d72e5f12c7 b
1013 diff -r 8580ff50825a -r 97d72e5f12c7 b
1014 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1014 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1015 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1015 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1016 @@ -0,0 +1,1 @@
1016 @@ -0,0 +1,1 @@
1017 +b
1017 +b
1018
1018
1019 % tagging csets
1019 % tagging csets
1020 % test inline for single named patch
1020 % test inline for single named patch
1021 This patch series consists of 1 patches.
1021 This patch series consists of 1 patches.
1022
1022
1023
1023
1024 Displaying [PATCH] test ...
1024 Displaying [PATCH] test ...
1025 Content-Type: multipart/mixed; boundary="===
1025 Content-Type: multipart/mixed; boundary="===
1026 MIME-Version: 1.0
1026 MIME-Version: 1.0
1027 Subject: [PATCH] test
1027 Subject: [PATCH] test
1028 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1028 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
1029 Message-Id: <ff2c9fa2018b15fa74b3.60@
1029 Message-Id: <ff2c9fa2018b15fa74b3.60@
1030 User-Agent: Mercurial-patchbomb
1030 User-Agent: Mercurial-patchbomb
1031 Date: Thu, 01 Jan 1970 00:01:00 +0000
1031 Date: Thu, 01 Jan 1970 00:01:00 +0000
1032 From: quux
1032 From: quux
1033 To: foo
1033 To: foo
1034 Cc: bar
1034 Cc: bar
1035
1035
1036 --===
1036 --===
1037 Content-Type: text/x-patch; charset="us-ascii"
1037 Content-Type: text/x-patch; charset="us-ascii"
1038 MIME-Version: 1.0
1038 MIME-Version: 1.0
1039 Content-Transfer-Encoding: 7bit
1039 Content-Transfer-Encoding: 7bit
1040 Content-Disposition: inline; filename=two.diff
1040 Content-Disposition: inline; filename=two.diff
1041
1041
1042 # HG changeset patch
1042 # HG changeset patch
1043 # User test
1043 # User test
1044 # Date 3 0
1044 # Date 3 0
1045 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1045 # Node ID ff2c9fa2018b15fa74b33363bda9527323e2a99f
1046 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1046 # Parent 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1047 c
1047 c
1048
1048
1049 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1049 diff -r 97d72e5f12c7 -r ff2c9fa2018b c
1050 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1050 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1051 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1051 +++ b/c Thu Jan 01 00:00:03 1970 +0000
1052 @@ -0,0 +1,1 @@
1052 @@ -0,0 +1,1 @@
1053 +c
1053 +c
1054
1054
1055 --===
1055 --===
1056 % test inline for multiple named/unnamed patches
1056 % test inline for multiple named/unnamed patches
1057 This patch series consists of 2 patches.
1057 This patch series consists of 2 patches.
1058
1058
1059
1059
1060 Write the introductory message for the patch series.
1060 Write the introductory message for the patch series.
1061
1061
1062
1062
1063 Displaying [PATCH 0 of 2] test ...
1063 Displaying [PATCH 0 of 2] test ...
1064 Content-Type: text/plain; charset="us-ascii"
1064 Content-Type: text/plain; charset="us-ascii"
1065 MIME-Version: 1.0
1065 MIME-Version: 1.0
1066 Content-Transfer-Encoding: 7bit
1066 Content-Transfer-Encoding: 7bit
1067 Subject: [PATCH 0 of 2] test
1067 Subject: [PATCH 0 of 2] test
1068 Message-Id: <patchbomb.60@
1068 Message-Id: <patchbomb.60@
1069 User-Agent: Mercurial-patchbomb
1069 User-Agent: Mercurial-patchbomb
1070 Date: Thu, 01 Jan 1970 00:01:00 +0000
1070 Date: Thu, 01 Jan 1970 00:01:00 +0000
1071 From: quux
1071 From: quux
1072 To: foo
1072 To: foo
1073 Cc: bar
1073 Cc: bar
1074
1074
1075
1075
1076 Displaying [PATCH 1 of 2] a ...
1076 Displaying [PATCH 1 of 2] a ...
1077 Content-Type: multipart/mixed; boundary="===
1077 Content-Type: multipart/mixed; boundary="===
1078 MIME-Version: 1.0
1078 MIME-Version: 1.0
1079 Subject: [PATCH 1 of 2] a
1079 Subject: [PATCH 1 of 2] a
1080 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1080 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1081 Message-Id: <8580ff50825a50c8f716.61@
1081 Message-Id: <8580ff50825a50c8f716.61@
1082 In-Reply-To: <patchbomb.60@
1082 In-Reply-To: <patchbomb.60@
1083 References: <patchbomb.60@
1083 References: <patchbomb.60@
1084 User-Agent: Mercurial-patchbomb
1084 User-Agent: Mercurial-patchbomb
1085 Date: Thu, 01 Jan 1970 00:01:01 +0000
1085 Date: Thu, 01 Jan 1970 00:01:01 +0000
1086 From: quux
1086 From: quux
1087 To: foo
1087 To: foo
1088 Cc: bar
1088 Cc: bar
1089
1089
1090 --===
1090 --===
1091 Content-Type: text/x-patch; charset="us-ascii"
1091 Content-Type: text/x-patch; charset="us-ascii"
1092 MIME-Version: 1.0
1092 MIME-Version: 1.0
1093 Content-Transfer-Encoding: 7bit
1093 Content-Transfer-Encoding: 7bit
1094 Content-Disposition: inline; filename=t2-1.patch
1094 Content-Disposition: inline; filename=t2-1.patch
1095
1095
1096 # HG changeset patch
1096 # HG changeset patch
1097 # User test
1097 # User test
1098 # Date 1 0
1098 # Date 1 0
1099 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1099 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1100 # Parent 0000000000000000000000000000000000000000
1100 # Parent 0000000000000000000000000000000000000000
1101 a
1101 a
1102
1102
1103 diff -r 000000000000 -r 8580ff50825a a
1103 diff -r 000000000000 -r 8580ff50825a a
1104 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1104 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1105 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1105 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1106 @@ -0,0 +1,1 @@
1106 @@ -0,0 +1,1 @@
1107 +a
1107 +a
1108
1108
1109 --===
1109 --===
1110 Displaying [PATCH 2 of 2] b ...
1110 Displaying [PATCH 2 of 2] b ...
1111 Content-Type: multipart/mixed; boundary="===
1111 Content-Type: multipart/mixed; boundary="===
1112 MIME-Version: 1.0
1112 MIME-Version: 1.0
1113 Subject: [PATCH 2 of 2] b
1113 Subject: [PATCH 2 of 2] b
1114 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1114 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1115 Message-Id: <97d72e5f12c7e84f8506.62@
1115 Message-Id: <97d72e5f12c7e84f8506.62@
1116 In-Reply-To: <patchbomb.60@
1116 In-Reply-To: <patchbomb.60@
1117 References: <patchbomb.60@
1117 References: <patchbomb.60@
1118 User-Agent: Mercurial-patchbomb
1118 User-Agent: Mercurial-patchbomb
1119 Date: Thu, 01 Jan 1970 00:01:02 +0000
1119 Date: Thu, 01 Jan 1970 00:01:02 +0000
1120 From: quux
1120 From: quux
1121 To: foo
1121 To: foo
1122 Cc: bar
1122 Cc: bar
1123
1123
1124 --===
1124 --===
1125 Content-Type: text/x-patch; charset="us-ascii"
1125 Content-Type: text/x-patch; charset="us-ascii"
1126 MIME-Version: 1.0
1126 MIME-Version: 1.0
1127 Content-Transfer-Encoding: 7bit
1127 Content-Transfer-Encoding: 7bit
1128 Content-Disposition: inline; filename=one.patch
1128 Content-Disposition: inline; filename=one.patch
1129
1129
1130 # HG changeset patch
1130 # HG changeset patch
1131 # User test
1131 # User test
1132 # Date 2 0
1132 # Date 2 0
1133 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1133 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1134 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1134 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1135 b
1135 b
1136
1136
1137 diff -r 8580ff50825a -r 97d72e5f12c7 b
1137 diff -r 8580ff50825a -r 97d72e5f12c7 b
1138 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1138 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1139 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1139 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1140 @@ -0,0 +1,1 @@
1140 @@ -0,0 +1,1 @@
1141 +b
1141 +b
1142
1142
1143 --===
1143 --===
1144 % test inreplyto
1144 % test inreplyto
1145 This patch series consists of 1 patches.
1145 This patch series consists of 1 patches.
1146
1146
1147
1147
1148 Displaying [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b ...
1148 Displaying [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b ...
1149 Content-Type: text/plain; charset="us-ascii"
1149 Content-Type: text/plain; charset="us-ascii"
1150 MIME-Version: 1.0
1150 MIME-Version: 1.0
1151 Content-Transfer-Encoding: 7bit
1151 Content-Transfer-Encoding: 7bit
1152 Subject: [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b
1152 Subject: [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b
1153 X-Mercurial-Node: e317db6a6f288748d1f6cb064f3810fcba66b1b6
1153 X-Mercurial-Node: e317db6a6f288748d1f6cb064f3810fcba66b1b6
1154 Message-Id: <e317db6a6f288748d1f6.60@
1154 Message-Id: <e317db6a6f288748d1f6.60@
1155 In-Reply-To: baz
1155 In-Reply-To: baz
1156 References: baz
1156 References: baz
1157 User-Agent: Mercurial-patchbomb
1157 User-Agent: Mercurial-patchbomb
1158 Date: Thu, 01 Jan 1970 00:01:00 +0000
1158 Date: Thu, 01 Jan 1970 00:01:00 +0000
1159 From: quux
1159 From: quux
1160 To: foo
1160 To: foo
1161 Cc: bar
1161 Cc: bar
1162
1162
1163 # HG changeset patch
1163 # HG changeset patch
1164 # User test
1164 # User test
1165 # Date 0 0
1165 # Date 0 0
1166 # Node ID e317db6a6f288748d1f6cb064f3810fcba66b1b6
1166 # Node ID e317db6a6f288748d1f6cb064f3810fcba66b1b6
1167 # Parent eae5fcf795eee29d0e45ffc9f519a91cd79fc9ff
1167 # Parent eae5fcf795eee29d0e45ffc9f519a91cd79fc9ff
1168 Added tag two, two.diff for changeset ff2c9fa2018b
1168 Added tag two, two.diff for changeset ff2c9fa2018b
1169
1169
1170 diff -r eae5fcf795ee -r e317db6a6f28 .hgtags
1170 diff -r eae5fcf795ee -r e317db6a6f28 .hgtags
1171 --- a/.hgtags Thu Jan 01 00:00:00 1970 +0000
1171 --- a/.hgtags Thu Jan 01 00:00:00 1970 +0000
1172 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
1172 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
1173 @@ -2,3 +2,5 @@
1173 @@ -2,3 +2,5 @@
1174 8580ff50825a50c8f716709acdf8de0deddcd6ab zero.foo
1174 8580ff50825a50c8f716709acdf8de0deddcd6ab zero.foo
1175 97d72e5f12c7e84f85064aa72e5a297142c36ed9 one
1175 97d72e5f12c7e84f85064aa72e5a297142c36ed9 one
1176 97d72e5f12c7e84f85064aa72e5a297142c36ed9 one.patch
1176 97d72e5f12c7e84f85064aa72e5a297142c36ed9 one.patch
1177 +ff2c9fa2018b15fa74b33363bda9527323e2a99f two
1177 +ff2c9fa2018b15fa74b33363bda9527323e2a99f two
1178 +ff2c9fa2018b15fa74b33363bda9527323e2a99f two.diff
1178 +ff2c9fa2018b15fa74b33363bda9527323e2a99f two.diff
1179
1179
1180 This patch series consists of 2 patches.
1181
1182
1183 Write the introductory message for the patch series.
1184
1185
1186 Displaying [PATCH 0 of 2] None ...
1187 Content-Type: text/plain; charset="us-ascii"
1188 MIME-Version: 1.0
1189 Content-Transfer-Encoding: 7bit
1190 Subject: [PATCH 0 of 2] None
1191 Message-Id: <patchbomb.60@
1192 In-Reply-To: baz
1193 References: baz
1194 User-Agent: Mercurial-patchbomb
1195 Date: Thu, 01 Jan 1970 00:01:00 +0000
1196 From: quux
1197 To: foo
1198 Cc: bar
1199
1200
1201 Displaying [PATCH 1 of 2] a ...
1202 Content-Type: text/plain; charset="us-ascii"
1203 MIME-Version: 1.0
1204 Content-Transfer-Encoding: 7bit
1205 Subject: [PATCH 1 of 2] a
1206 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
1207 Message-Id: <8580ff50825a50c8f716.61@
1208 In-Reply-To: <patchbomb.60@
1209 References: <patchbomb.60@
1210 User-Agent: Mercurial-patchbomb
1211 Date: Thu, 01 Jan 1970 00:01:01 +0000
1212 From: quux
1213 To: foo
1214 Cc: bar
1215
1216 # HG changeset patch
1217 # User test
1218 # Date 1 0
1219 # Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
1220 # Parent 0000000000000000000000000000000000000000
1221 a
1222
1223 diff -r 000000000000 -r 8580ff50825a a
1224 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1225 +++ b/a Thu Jan 01 00:00:01 1970 +0000
1226 @@ -0,0 +1,1 @@
1227 +a
1228
1229 Displaying [PATCH 2 of 2] b ...
1230 Content-Type: text/plain; charset="us-ascii"
1231 MIME-Version: 1.0
1232 Content-Transfer-Encoding: 7bit
1233 Subject: [PATCH 2 of 2] b
1234 X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1235 Message-Id: <97d72e5f12c7e84f8506.62@
1236 In-Reply-To: <patchbomb.60@
1237 References: <patchbomb.60@
1238 User-Agent: Mercurial-patchbomb
1239 Date: Thu, 01 Jan 1970 00:01:02 +0000
1240 From: quux
1241 To: foo
1242 Cc: bar
1243
1244 # HG changeset patch
1245 # User test
1246 # Date 2 0
1247 # Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
1248 # Parent 8580ff50825a50c8f716709acdf8de0deddcd6ab
1249 b
1250
1251 diff -r 8580ff50825a -r 97d72e5f12c7 b
1252 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1253 +++ b/b Thu Jan 01 00:00:02 1970 +0000
1254 @@ -0,0 +1,1 @@
1255 +b
1256
General Comments 0
You need to be logged in to leave comments. Login now