git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[StGit PATCH v2 4/6] stg mail: factor out __update_header

From
ACAlex Chiang <achiang@hp.com>
Date
Dec 2, 2009, 00:46 UTC
Message-ID
<20091202004622.7737.78332.stgit@bob.kio>
In-Reply-To
<20091202003503.7737.51579.stgit@bob.kio>
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 <kha@treskal.com>
Signed-off-by: Alex Chiang <achiang@hp.com>
---
 stgit/commands/mail.py |   48 +++++++++++++++++++++++++-----------------------
 1 files changed, 25 insertions(+), 23 deletions(-)
diff --git a/stgit/commands/mail.py b/stgit/commands/mail.py
index edff878..f430a13 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')
Previous: Karl WibergNext: Alex Chiang
Message 11 of 19 in “add support for git send-email”
  1. 0/6 add support for git send-emailAlex Chiang, Dec 2, 2009
  2. 1/6 stg mail: Refactor __send_message and friendsAlex Chiang, Dec 2, 2009
  3. Karl WibergDec 2, 2009
  4. Alex ChiangDec 3, 2009
  5. 1/6 stg mail: Refactor __send_message and friendsAlex Chiang, Dec 3, 2009
  6. 2/6 stg mail: reorder __build_[message|cover] parametersAlex Chiang, Dec 2, 2009
  7. 3/6 stg mail: make __send_message do moreAlex Chiang, Dec 2, 2009
  8. Karl WibergDec 2, 2009
  9. Alex ChiangDec 3, 2009
  10. Karl WibergDec 4, 2009
  11. 4/6 stg mail: factor out __update_headerAlex Chiang, Dec 2, 2009
  12. 5/6 stg mail: add basic support for git send-emailAlex Chiang, Dec 2, 2009
  13. 6/6 stg mail: don't parse To/Cc/Bcc in --git modeAlex Chiang, Dec 2, 2009
  14. Karl WibergDec 2, 2009
  15. Alex ChiangDec 3, 2009
  16. Karl WibergDec 2, 2009
  17. Catalin MarinasDec 2, 2009
  18. Catalin MarinasDec 6, 2009
  19. Karl WibergDec 7, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.