From c28b8841b551c763abd475ce38f9ca525e29d81b Mon Sep 17 00:00:00 2001 From: Alex Chiang Date: Fri, 5 Feb 2010 13:44:57 +0000 Subject: [PATCH] stg mail: factor out __update_header Factor __update_header out of __build_address_headers. Headers like Reply-To, Mail-Reply-To, and Mail-Followup-To are now handled in __build_extra_headers. We make this change because in the future, we do not want to call __build_address_headers if using git send-email but we will always want to call __build_extra_headers. Cc: Karl Wiberg Signed-off-by: Alex Chiang Signed-off-by: Catalin Marinas --- stgit/commands/mail.py | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/stgit/commands/mail.py b/stgit/commands/mail.py index 5d1dc9b..9077744 100644 --- a/stgit/commands/mail.py +++ b/stgit/commands/mail.py @@ -262,25 +262,25 @@ def __send_message(type, tmpl, options, *args): out.done() return msg_id -def __build_address_headers(msg, options, extra_cc = []): - """Build the address headers and check existing headers in the - template. - """ +def __update_header(msg, header, addr = '', ignore = ()): def __addr_pairs(msg, header, extra): pairs = email.Utils.getaddresses(msg.get_all(header, []) + extra) # remove pairs without an address and resolve the aliases return [address_or_alias(p) for p in pairs if p[1]] - def __update_header(header, addr = '', ignore = ()): - addr_pairs = __addr_pairs(msg, header, [addr]) - del msg[header] - # remove the duplicates and filter the addresses - addr_dict = dict((addr, email.Utils.formataddr((name, addr))) - for name, addr in addr_pairs if addr not in ignore) - if addr_dict: - msg[header] = ', '.join(addr_dict.itervalues()) - return set(addr_dict.iterkeys()) + addr_pairs = __addr_pairs(msg, header, [addr]) + del msg[header] + # remove the duplicates and filter the addresses + addr_dict = dict((addr, email.Utils.formataddr((name, addr))) + for name, addr in addr_pairs if addr not in ignore) + if addr_dict: + msg[header] = ', '.join(addr_dict.itervalues()) + return set(addr_dict.iterkeys()) +def __build_address_headers(msg, options, extra_cc = []): + """Build the address headers and check existing headers in the + template. + """ to_addr = '' cc_addr = '' extra_cc_addr = '' @@ -300,18 +300,14 @@ def __build_address_headers(msg, options, extra_cc = []): bcc_addr = autobcc # if an address is on a header, ignore it from the rest - to_set = __update_header('To', to_addr) - cc_set = __update_header('Cc', cc_addr, to_set) - bcc_set = __update_header('Bcc', bcc_addr, to_set.union(cc_set)) + to_set = __update_header(msg, 'To', to_addr) + cc_set = __update_header(msg, 'Cc', cc_addr, to_set) + bcc_set = __update_header(msg, 'Bcc', bcc_addr, to_set.union(cc_set)) # --auto generated addresses, don't include the sender - from_set = __update_header('From') - __update_header('Cc', extra_cc_addr, to_set.union(bcc_set).union(from_set)) - - # update other address headers - __update_header('Reply-To') - __update_header('Mail-Reply-To') - __update_header('Mail-Followup-To') + from_set = __update_header(msg, 'From') + __update_header(msg, 'Cc', extra_cc_addr, + to_set.union(bcc_set).union(from_set)) def __get_signers_list(msg): """Return the address list generated from signed-off-by and @@ -349,6 +345,12 @@ def __build_extra_headers(msg, msg_id, ref_id = None): msg['References'] = ref_id msg['User-Agent'] = 'StGit/%s' % version.version + # update other address headers + __update_header(msg, 'Reply-To') + __update_header(msg, 'Mail-Reply-To') + __update_header(msg, 'Mail-Followup-To') + + def __encode_message(msg): # 7 or 8 bit encoding charset = email.Charset.Charset('utf-8') -- 2.11.0