Mercurial > hg
changeset 5973:ea77f6f77514
patchbomb: undo backout and fix bugs in the earlier patch
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 31 Jan 2008 14:44:19 -0600 |
parents | d83020d0466f |
children | bed929082b58 |
files | hgext/patchbomb.py mercurial/mail.py |
diffstat | 2 files changed, 32 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/patchbomb.py Tue Jan 22 23:07:23 2008 +0100 +++ b/hgext/patchbomb.py Thu Jan 31 14:44:19 2008 -0600 @@ -381,6 +381,7 @@ parent = None sender_addr = email.Utils.parseaddr(sender)[1] + sendmail = None for m in msgs: try: m['Message-Id'] = genmsgid(m['X-Mercurial-Node']) @@ -425,10 +426,12 @@ fp.write('\n\n') fp.close() else: + if not sendmail: + sendmail = mail.connect(ui) ui.status('Sending ', m['Subject'], ' ...\n') # Exim does not remove the Bcc field del m['Bcc'] - mail.sendmail(ui, sender, to + bcc + cc, m.as_string(0)) + sendmail(sender, to + bcc + cc, m.as_string(0)) cmdtable = { "email":
--- a/mercurial/mail.py Tue Jan 22 23:07:23 2008 +0100 +++ b/mercurial/mail.py Thu Jan 31 14:44:19 2008 -0600 @@ -9,8 +9,7 @@ import os, smtplib, templater, util, socket def _smtp(ui): - '''send mail using smtp.''' - + '''build an smtp connection and return a function to send mail''' local_hostname = ui.config('smtp', 'local_hostname') s = smtplib.SMTP(local_hostname=local_hostname) mailhost = ui.config('smtp', 'host') @@ -36,46 +35,42 @@ ui.note(_('(authenticating to mail server as %s)\n') % (username)) s.login(username, password) - return s -class _sendmail(object): - '''send mail using sendmail.''' + def send(sender, recipients, msg): + try: + return s.sendmail(sender, recipients, msg) + except smtplib.SMTPRecipientsRefused, inst: + recipients = [r[1] for r in inst.recipients.values()] + raise util.Abort('\n' + '\n'.join(recipients)) + except smtplib.SMTPException, inst: + raise util.Abort(inst) - def __init__(self, ui, program): - self.ui = ui - self.program = program + return send - def sendmail(self, sender, recipients, msg): - cmdline = '%s -f %s %s' % ( - self.program, templater.email(sender), - ' '.join(map(templater.email, recipients))) - self.ui.note(_('sending mail: %s\n') % cmdline) - fp = os.popen(cmdline, 'w') - fp.write(msg) - ret = fp.close() - if ret: - raise util.Abort('%s %s' % ( - os.path.basename(self.program.split(None, 1)[0]), - util.explain_exit(ret)[0])) +def _sendmail(ui, sender, recipients, msg): + '''send mail using sendmail.''' + program = ui.config('email', 'method') + cmdline = '%s -f %s %s' % (program, templater.email(sender), + ' '.join(map(templater.email, recipients))) + ui.note(_('sending mail: %s\n') % cmdline) + fp = os.popen(cmdline, 'w') + fp.write(msg) + ret = fp.close() + if ret: + raise util.Abort('%s %s' % ( + os.path.basename(program.split(None, 1)[0]), + util.explain_exit(ret)[0])) def connect(ui): - '''make a mail connection. object returned has one method, sendmail. + '''make a mail connection. return a function to send mail. call as sendmail(sender, list-of-recipients, msg).''' - - method = ui.config('email', 'method', 'smtp') - if method == 'smtp': + if ui.config('email', 'method', 'smtp') == 'smtp': return _smtp(ui) - - return _sendmail(ui, method) + return lambda s, r, m: _sendmail(ui, s, r, m) def sendmail(ui, sender, recipients, msg): - try: - return connect(ui).sendmail(sender, recipients, msg) - except smtplib.SMTPRecipientsRefused, inst: - recipients = [r[1] for r in inst.recipients.values()] - raise util.Abort('\n' + '\n'.join(recipients)) - except smtplib.SMTPException, inst: - raise util.Abort(inst) + send = connect(ui) + return send(sender, recipients, msg) def validateconfig(ui): '''determine if we have enough config data to try sending email.'''