##// END OF EJS Templates
Polish patchbomb script....
Bryan O'Sullivan -
r877:25430c52 default
parent child Browse files
Show More
@@ -12,8 +12,8 b''
12 12 #
13 13 # The remainder of the changeset description.
14 14 #
15 # If the diffstat program is installed, the result of running
16 # diffstat on the patch.
15 # [Optional] If the diffstat program is installed, the result of
16 # running diffstat on the patch.
17 17 #
18 18 # The patch itself, as generated by "hg export".
19 19 #
@@ -26,8 +26,8 b''
26 26 # changes.
27 27 #
28 28 # It is best to run this script with the "-n" (test only) flag before
29 # firing it up "for real", in which case it will display each of the
30 # messages that it would send.
29 # firing it up "for real", in which case it will use your pager to
30 # display each of the messages that it would send.
31 31 #
32 32 # To configure a default mail host, add a section like this to your
33 33 # hgrc file:
@@ -35,6 +35,14 b''
35 35 # [smtp]
36 36 # host = my_mail_host
37 37 # port = 1025
38 #
39 # To configure other defaults, add a section like this to your hgrc
40 # file:
41 #
42 # [patchbomb]
43 # from = My Name <my@email>
44 # to = recipient1, recipient2, ...
45 # cc = cc1, cc2, ...
38 46
39 47 from email.MIMEMultipart import MIMEMultipart
40 48 from email.MIMEText import MIMEText
@@ -81,7 +89,7 b' def patchbomb(ui, repo, *revs, **opts):'
81 89 if r: return r
82 90 if default is not None: return default
83 91 if empty_ok: return r
84 print >> sys.stderr, 'Please enter a valid value.'
92 ui.warn('Please enter a valid value.\n')
85 93
86 94 def confirm(s):
87 95 if not prompt(s, default = 'y', rest = '? ').lower().startswith('y'):
@@ -108,7 +116,9 b' def patchbomb(ui, repo, *revs, **opts):'
108 116 if not node: raise ValueError
109 117 body = ('\n'.join(desc[1:]).strip() or
110 118 'Patch subject is complete summary.')
111 body += '\n\n\n' + cdiffstat('\n'.join(desc), patch) + '\n\n'
119 body += '\n\n\n'
120 if opts['diffstat']:
121 body += cdiffstat('\n'.join(desc), patch) + '\n\n'
112 122 body += '\n'.join(patch)
113 123 msg = MIMEText(body)
114 124 subj = '[PATCH %d of %d] %s' % (idx, total, desc[0].strip())
@@ -150,14 +160,18 b' def patchbomb(ui, repo, *revs, **opts):'
150 160
151 161 ui.write('\nWrite the introductory message for the patch series.\n\n')
152 162
153 sender = opts['sender'] or prompt('From', ui.username())
163 sender = (opts['from'] or ui.config('patchbomb', 'from') or
164 prompt('From', ui.username()))
154 165
155 166 msg = MIMEMultipart()
156 167 msg['Subject'] = '[PATCH 0 of %d] %s' % (
157 168 len(patches),
169 opts['subject'] or
158 170 prompt('Subject:', rest = ' [PATCH 0 of %d] ' % len(patches)))
159 to = opts['to'] or [s.strip() for s in prompt('To').split(',')]
160 cc = opts['cc'] or [s.strip() for s in prompt('Cc', default = '').split(',')]
171 to = (opts['to'] or ui.config('patchbomb', 'to') or
172 [s.strip() for s in prompt('To').split(',')])
173 cc = (opts['cc'] or ui.config('patchbomb', 'cc') or
174 [s.strip() for s in prompt('Cc', default = '').split(',')])
161 175
162 176 ui.write('Finish with ^D or a dot on a line by itself.\n\n')
163 177
@@ -194,7 +208,7 b' def patchbomb(ui, repo, *revs, **opts):'
194 208 m['In-Reply-To'] = parent
195 209 else:
196 210 parent = m['Message-Id']
197 m['Date'] = time.strftime('%a, %m %b %Y %T ', time.localtime(start_time)) + tz
211 m['Date'] = time.strftime('%a, %e %b %Y %T ', time.localtime(start_time)) + tz
198 212 start_time += 1
199 213 m['From'] = sender
200 214 m['To'] = ', '.join(to)
@@ -212,8 +226,10 b' def patchbomb(ui, repo, *revs, **opts):'
212 226
213 227 if __name__ == '__main__':
214 228 optspec = [('c', 'cc', [], 'email addresses of copy recipients'),
229 ('d', 'diffstat', None, 'add diffstat output to messages'),
230 ('f', 'from', '', 'email address of sender'),
215 231 ('n', 'test', None, 'print messages that would be sent'),
216 ('s', 'sender', '', 'email address of sender'),
232 ('s', 'subject', '', 'subject of introductory message'),
217 233 ('t', 'to', [], 'email addresses of recipients')]
218 234 options = {}
219 235 try:
General Comments 0
You need to be logged in to leave comments. Login now