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

[StGit PATCH v2 5/6] stg mail: add basic support for git send-email

From
ACAlex Chiang <achiang@hp.com>
Date
Dec 2, 2009, 00:46 UTC
Message-ID
<20091202004627.7737.23460.stgit@bob.kio>
In-Reply-To
<20091202003503.7737.51579.stgit@bob.kio>

This is the first step in turning stg mail into a wrapper for git send-email. It requires passing the --git option to stg mail for now.

Only a few basic options are supported for now, namely To/Cc/Bcc.
git send-email options used:
  --suppress-cc=self	prevent further information prompts
  --quiet		reduce git send-email output
Cc: Karl Wiberg <kha@treskal.com>
Signed-off-by: Alex Chiang <achiang@hp.com>
---
 stgit/commands/mail.py |   50 ++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/stgit/commands/mail.py b/stgit/commands/mail.py
index f430a13..8a33c22 100644
--- a/stgit/commands/mail.py
+++ b/stgit/commands/mail.py
@@ -140,7 +140,9 @@ options = [
     opt('-b', '--branch', args = [argparse.stg_branches],
         short = 'Use BRANCH instead of the default branch'),
     opt('-m', '--mbox', action = 'store_true',
-        short = 'Generate an mbox file instead of sending')
+        short = 'Generate an mbox file instead of sending'),
+    opt('--git', action = 'store_true',
+        short = 'Use git send-email (EXPERIMENTAL)')
     ] + argparse.diff_opts_option()
 
 directory = DirectoryHasRepository(log = False)
@@ -228,6 +230,42 @@ def __send_message_smtp(smtpserver, from_addr, to_addr_list, msg, options):
 
     s.quit()
 
+def __send_message_git(msg, options):
+    """Send the message using git send-email
+    """
+    from subprocess import call
+    from tempfile import mkstemp
+
+    cmd = ["git", "send-email", "--from=%s" % msg['From']]
+    cmd.append("--quiet")
+    cmd.append("--suppress-cc=self")
+    if not options.auto:
+        cmd.append("--suppress-cc=body")
+
+    # We only support To/Cc/Bcc in git send-email for now.
+    for x in ['to', 'cc', 'bcc']:
+        if getattr(options, x):
+            cmd.extend('--%s=%s' % (x, a) for a in getattr(options, x))
+
+    # XXX: hack for now so that we don't duplicate To/Cc/Bcc headers
+    # in the mail, as git send-email inserts those for us.
+    del msg['To']
+    del msg['Cc']
+    del msg['Bcc']
+
+    (fd, path) = mkstemp()
+    os.write(fd, msg.as_string(options.mbox))
+    os.close(fd)
+
+    try:
+        try:
+            cmd.append(path)
+            call(cmd)
+        except Exception, err:
+            raise CmdException, str(err)
+    finally:
+        os.unlink(path)
+
 def __send_message(type, tmpl, options, *args):
     """Message sending dispatcher.
     """
@@ -245,10 +283,13 @@ def __send_message(type, tmpl, options, *args):
         out.stdout_raw(msg_str + '\n')
         return msg_id
 
-    out.start('Sending ' + outstr)
+    if not options.git:
+        out.start('Sending ' + outstr)
 
     smtpserver = options.smtp_server or config.get('stgit.smtpserver')
-    if smtpserver.startswith('/'):
+    if options.git:
+        __send_message_git(msg, options)
+    elif smtpserver.startswith('/'):
         # Use the sendmail tool
         __send_message_sendmail(smtpserver, msg_str)
     else:
@@ -259,7 +300,8 @@ def __send_message(type, tmpl, options, *args):
     if type == 'cover' or (type == 'patch' and patch_nr < total_nr):
         sleep = options.sleep or config.getint('stgit.smtpdelay')
         time.sleep(sleep)
-    out.done()
+    if not options.git:
+        out.done()
     return msg_id
 
 def __update_header(msg, header, addr = '', ignore = ()):
Previous: Alex ChiangNext: Alex Chiang
Message 12 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.