##// END OF EJS Templates
merge with crew-stable
Dirkjan Ochtman -
r9316:23cf7b52 merge default
parent child Browse files
Show More
@@ -70,7 +70,7 can push changes to, they can manage the
70
70
71 from mercurial.i18n import _
71 from mercurial.i18n import _
72 from mercurial import patch, cmdutil, templater, util, mail
72 from mercurial import patch, cmdutil, templater, util, mail
73 import email.Parser, fnmatch, socket, time
73 import email.Parser, email.Errors, fnmatch, socket, time
74
74
75 # template for single changeset can include email headers.
75 # template for single changeset can include email headers.
76 single_template = '''
76 single_template = '''
@@ -180,17 +180,22 class notifier(object):
180 '''send message.'''
180 '''send message.'''
181
181
182 p = email.Parser.Parser()
182 p = email.Parser.Parser()
183 try:
183 msg = p.parsestr(data)
184 msg = p.parsestr(data)
185 except email.Errors.MessageParseError, inst:
186 raise util.Abort(inst)
184
187
185 # store sender and subject
188 # store sender and subject
186 sender, subject = msg['From'], msg['Subject']
189 sender, subject = msg['From'], msg['Subject']
187 del msg['From'], msg['Subject']
190 del msg['From'], msg['Subject']
188 # store remaining headers
191
192 if not msg.is_multipart():
193 # create fresh mime message from scratch
194 # (multipart templates must take care of this themselves)
189 headers = msg.items()
195 headers = msg.items()
190 # create fresh mime message from msg body
196 payload = msg.get_payload()
191 text = msg.get_payload()
192 # for notification prefer readability over data precision
197 # for notification prefer readability over data precision
193 msg = mail.mimeencode(self.ui, text, self.charsets, self.test)
198 msg = mail.mimeencode(self.ui, payload, self.charsets, self.test)
194 # reinstate custom headers
199 # reinstate custom headers
195 for k, v in headers:
200 for k, v in headers:
196 msg[k] = v
201 msg[k] = v
@@ -81,7 +81,10 class _demandmod(object):
81 def _demandimport(name, globals=None, locals=None, fromlist=None, level=None):
81 def _demandimport(name, globals=None, locals=None, fromlist=None, level=None):
82 if not locals or name in ignore or fromlist == ('*',):
82 if not locals or name in ignore or fromlist == ('*',):
83 # these cases we can't really delay
83 # these cases we can't really delay
84 if level is None:
84 return _origimport(name, globals, locals, fromlist)
85 return _origimport(name, globals, locals, fromlist)
86 else:
87 return _origimport(name, globals, locals, fromlist, level)
85 elif not fromlist:
88 elif not fromlist:
86 # import a [as b]
89 # import a [as b]
87 if '.' in name: # a.b
90 if '.' in name: # a.b
@@ -85,7 +85,7 def label(code):
85 try:
85 try:
86 mname = _fn2mod[code.co_filename]
86 mname = _fn2mod[code.co_filename]
87 except KeyError:
87 except KeyError:
88 for k, v in sys.modules.iteritems():
88 for k, v in list(sys.modules.iteritems()):
89 if v is None:
89 if v is None:
90 continue
90 continue
91 if not hasattr(v, '__file__'):
91 if not hasattr(v, '__file__'):
General Comments 0
You need to be logged in to leave comments. Login now