comparison hgext/patchbomb.py @ 4027:2601ac9c54f0

patchbomb: fix timezone offset in message date header Use mercurial.util instead of time to set and format dates.
author Christian Ebert <blacktrash@gmx.net>
date Sat, 13 Jan 2007 02:15:49 +0100
parents 0e68608bd11d
children 9210fba03d16 49d7a035235b
comparison
equal deleted inserted replaced
4026:8520a773a141 4027:2601ac9c54f0
63 # 63 #
64 # That should be all. Now your patchbomb is on its way out. 64 # That should be all. Now your patchbomb is on its way out.
65 65
66 from mercurial.demandload import * 66 from mercurial.demandload import *
67 demandload(globals(), '''email.MIMEMultipart email.MIMEText email.Utils 67 demandload(globals(), '''email.MIMEMultipart email.MIMEText email.Utils
68 mercurial:cmdutil,commands,hg,mail,ui,patch 68 mercurial:cmdutil,commands,hg,mail,ui,patch,util
69 os errno popen2 socket sys tempfile time''') 69 os errno popen2 socket sys tempfile''')
70 from mercurial.i18n import gettext as _ 70 from mercurial.i18n import gettext as _
71 from mercurial.node import * 71 from mercurial.node import *
72 72
73 try: 73 try:
74 # readline gives raw_input editing capabilities, but is not 74 # readline gives raw_input editing capabilities, but is not
163 if subj.endswith('.'): subj = subj[:-1] 163 if subj.endswith('.'): subj = subj[:-1]
164 msg['Subject'] = subj 164 msg['Subject'] = subj
165 msg['X-Mercurial-Node'] = node 165 msg['X-Mercurial-Node'] = node
166 return msg 166 return msg
167 167
168 start_time = int(time.time()) 168 start_time = util.makedate()
169 169
170 def genmsgid(id): 170 def genmsgid(id):
171 return '<%s.%s@%s>' % (id[:20], start_time, socket.getfqdn()) 171 return '<%s.%s@%s>' % (id[:20], int(start_time[0]), socket.getfqdn())
172 172
173 patches = [] 173 patches = []
174 174
175 class exportee: 175 class exportee:
176 def __init__(self, container): 176 def __init__(self, container):
251 ui.write('\n') 251 ui.write('\n')
252 252
253 if not opts['test'] and not opts['mbox']: 253 if not opts['test'] and not opts['mbox']:
254 mailer = mail.connect(ui) 254 mailer = mail.connect(ui)
255 parent = None 255 parent = None
256
257 # Calculate UTC offset
258 if time.daylight: offset = time.altzone
259 else: offset = time.timezone
260 if offset <= 0: sign, offset = '+', -offset
261 else: sign = '-'
262 offset = '%s%02d%02d' % (sign, offset / 3600, (offset % 3600) / 60)
263 256
264 sender_addr = email.Utils.parseaddr(sender)[1] 257 sender_addr = email.Utils.parseaddr(sender)[1]
265 for m in msgs: 258 for m in msgs:
266 try: 259 try:
267 m['Message-Id'] = genmsgid(m['X-Mercurial-Node']) 260 m['Message-Id'] = genmsgid(m['X-Mercurial-Node'])
269 m['Message-Id'] = genmsgid('patchbomb') 262 m['Message-Id'] = genmsgid('patchbomb')
270 if parent: 263 if parent:
271 m['In-Reply-To'] = parent 264 m['In-Reply-To'] = parent
272 else: 265 else:
273 parent = m['Message-Id'] 266 parent = m['Message-Id']
274 m['Date'] = time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime(start_time)) + ' ' + offset 267 m['Date'] = util.datestr(date=start_time,
275 268 format="%a, %d %b %Y %H:%M:%S", timezone=True)
276 start_time += 1 269
270 start_time = (start_time[0] + 1, start_time[1])
277 m['From'] = sender 271 m['From'] = sender
278 m['To'] = ', '.join(to) 272 m['To'] = ', '.join(to)
279 if cc: m['Cc'] = ', '.join(cc) 273 if cc: m['Cc'] = ', '.join(cc)
280 if bcc: m['Bcc'] = ', '.join(bcc) 274 if bcc: m['Bcc'] = ', '.join(bcc)
281 if opts['test']: 275 if opts['test']:
289 raise 283 raise
290 fp.close() 284 fp.close()
291 elif opts['mbox']: 285 elif opts['mbox']:
292 ui.status('Writing ', m['Subject'], ' ...\n') 286 ui.status('Writing ', m['Subject'], ' ...\n')
293 fp = open(opts['mbox'], m.has_key('In-Reply-To') and 'ab+' or 'wb+') 287 fp = open(opts['mbox'], m.has_key('In-Reply-To') and 'ab+' or 'wb+')
294 date = time.asctime(time.localtime(start_time)) 288 date = util.datestr(date=start_time,
289 format='%a %b %d %H:%M:%S %Y', timezone=False)
295 fp.write('From %s %s\n' % (sender_addr, date)) 290 fp.write('From %s %s\n' % (sender_addr, date))
296 fp.write(m.as_string(0)) 291 fp.write(m.as_string(0))
297 fp.write('\n\n') 292 fp.write('\n\n')
298 fp.close() 293 fp.close()
299 else: 294 else: