@@ -140,31 +140,44 @@ def find_content(project, mail):
commentbuf = ''
for part in mail.walk():
- if part.get_content_maintype() != 'text':
- continue
+ if part.get_content_maintype() == 'text':
+ payload = part.get_payload(decode=True)
+ charset = part.get_content_charset()
+ subtype = part.get_content_subtype()
- payload = part.get_payload(decode=True)
- charset = part.get_content_charset()
- subtype = part.get_content_subtype()
+ # if we don't have a charset, assume utf-8
+ if charset is None:
+ charset = 'utf-8'
- # if we don't have a charset, assume utf-8
- if charset is None:
- charset = 'utf-8'
+ if not isinstance(payload, unicode):
+ payload = unicode(payload, charset)
- if not isinstance(payload, unicode):
- payload = unicode(payload, charset)
+ if subtype in ['x-patch', 'x-diff']:
+ patchbuf = payload
- if subtype in ['x-patch', 'x-diff']:
- patchbuf = payload
+ elif subtype == 'plain':
+ if not patchbuf:
+ (patchbuf, c) = parse_patch(payload)
+ else:
+ c = payload
- elif subtype == 'plain':
- if not patchbuf:
- (patchbuf, c) = parse_patch(payload)
- else:
- c = payload
+ if c is not None:
+ commentbuf += c.strip() + '\n'
- if c is not None:
- commentbuf += c.strip() + '\n'
+ elif part.get_content_maintype() == 'application' and part.get_content_subtype() == 'octet-stream':
+ payload = part.get_payload(decode=True)
+ charset = part.get_content_charset()
+ # if we don't have a charset, assume utf-8
+ if charset is None:
+ charset = 'utf-8'
+
+ if not isinstance(payload, unicode):
+ payload = unicode(payload, charset)
+
+ (patchbuf, c) = parse_patch(payload)
+
+ if c is not None:
+ commentbuf += c.strip() + '\n'
patch = None
comment = None
Hi, attached patch adds handling for octet-stream typed patches, like google mail sends them. It relies on parse_patch to determine if the octet-stream is actually a patch, and I didn't check how robust that is against abuse (eg. binary data), so that might not be the best approach. Signed-off-by: Patrick Georgi <patrick.georgi@coresystems.de> The other issue I'd like to fix (or see fixed preferably :-) ) is that replies that dissect a patch (by commenting inline) sometimes end up as new (and invalid) patches on the patchwork queue. My approach would be to change parse_patch to be somewhat more strict on the patch format. I didn't look at it yet, but that should fix it. Is it a design goal to keep reformatted patches (eg. line breaks) alive? That would break said approach. Regards, Patrick Georgi