# HG changeset patch # User Christian Ebert # Date 1249485548 -7200 # Node ID 8736b1c853ffadfc3bdb663b7af7e3e7ca7bbdba # Parent 73bec717b825f327cf6f0ec574741bc77c4c0197 notify: do not mime encode multipart templates Mulitpart templates should take care of this themselves. See http://www.selenic.com/pipermail/mercurial/2009-July/027017.html Also catch potential parsing errors gracefully. diff -r 73bec717b825 -r 8736b1c853ff hgext/notify.py --- a/hgext/notify.py Sun Aug 02 19:21:47 2009 -0700 +++ b/hgext/notify.py Wed Aug 05 17:19:08 2009 +0200 @@ -66,7 +66,7 @@ from mercurial.i18n import _ from mercurial import patch, cmdutil, templater, util, mail -import email.Parser, fnmatch, socket, time +import email.Parser, email.Errors, fnmatch, socket, time # template for single changeset can include email headers. single_template = ''' @@ -176,20 +176,25 @@ '''send message.''' p = email.Parser.Parser() - msg = p.parsestr(data) + try: + msg = p.parsestr(data) + except email.Errors.MessageParseError, inst: + raise util.Abort(inst) # store sender and subject sender, subject = msg['From'], msg['Subject'] del msg['From'], msg['Subject'] - # store remaining headers - headers = msg.items() - # create fresh mime message from msg body - text = msg.get_payload() - # for notification prefer readability over data precision - msg = mail.mimeencode(self.ui, text, self.charsets, self.test) - # reinstate custom headers - for k, v in headers: - msg[k] = v + + if not msg.is_multipart(): + # create fresh mime message from scratch + # (multipart templates must take care of this themselves) + headers = msg.items() + payload = msg.get_payload() + # for notification prefer readability over data precision + msg = mail.mimeencode(self.ui, payload, self.charsets, self.test) + # reinstate custom headers + for k, v in headers: + msg[k] = v msg['Date'] = util.datestr(format="%a, %d %b %Y %H:%M:%S %1%2")