Use .git/info/exclude instead of .git/exclude
[stgit] / stgit / commands / mail.py
index e2fcbec..d758b9c 100644 (file)
@@ -51,6 +51,7 @@ additional headers and a blank line. The patch e-mail template accepts
 the following variables:
 
   %(patch)s        - patch name
+  %(maintainer)s   - 'authname <authemail>' as read from the config file
   %(shortdescr)s   - the first line of the patch description
   %(longdescr)s    - the rest of the patch description, after the first line
   %(endofheaders)s - delimiter between e-mail headers and body
@@ -59,14 +60,16 @@ the following variables:
   %(date)s         - current date/time
   %(patchnr)s      - patch number
   %(totalnr)s      - total number of patches to be sent
+  %(number)s       - empty if only one patch is sent or ' patchnr/totalnr'
   %(authname)s     - author's name
   %(authemail)s    - author's email
   %(authdate)s     - patch creation date
   %(commname)s     - committer's name
   %(commemail)s    - committer's e-mail
 
-For the preamble e-mail template, only the %(date)s, %(endofheaders)s
-and %(totalnr)s variables are supported."""
+For the preamble e-mail template, only the %(maintainer)s, %(date)s,
+%(endofheaders)s, %(patchnr)s, %(totalnr)s and %(number)s variables
+are supported."""
 
 options = [make_option('-a', '--all',
                        help = 'e-mail all the applied patches',
@@ -94,6 +97,17 @@ options = [make_option('-a', '--all',
                        help = 'username for SMTP authentication')]
 
 
+def __get_maintainer():
+    """Return the 'authname <authemail>' string as read from the
+    configuration file
+    """
+    if config.has_option('stgit', 'authname') \
+           and config.has_option('stgit', 'authemail'):
+        return '%s <%s>' % (config.get('stgit', 'authname'),
+                            config.get('stgit', 'authemail'))
+    else:
+        return None
+
 def __parse_addresses(string):
     """Return a two elements tuple: (from, [to])
     """
@@ -141,6 +155,10 @@ def __send_message(smtpserver, from_addr, to_addr_list, msg, sleep,
 def __build_first(tmpl, total_nr, msg_id, options):
     """Build the first message (series description) to be sent via SMTP
     """
+    maintainer = __get_maintainer()
+    if not maintainer:
+        maintainer = ''
+
     headers_end = ''
     if options.to:
         headers_end += 'To: %s\n' % options.to
@@ -151,10 +169,18 @@ def __build_first(tmpl, total_nr, msg_id, options):
     headers_end += 'Message-Id: %s\n' % msg_id
 
     total_nr_str = str(total_nr)
+    patch_nr_str = '0'.zfill(len(total_nr_str))
+    if total_nr > 1:
+        number_str = ' %s/%s' % (patch_nr_str, total_nr_str)
+    else:
+        number_str = ''
 
-    tmpl_dict = {'endofheaders': headers_end,
+    tmpl_dict = {'maintainer':   maintainer,
+                 'endofheaders': headers_end,
                  'date':         email.Utils.formatdate(localtime = True),
-                 'totalnr':      total_nr_str}
+                 'patchnr':      patch_nr_str,
+                 'totalnr':      total_nr_str,
+                 'number':       number_str}
 
     try:
         msg = tmpl % tmpl_dict
@@ -167,7 +193,6 @@ def __build_first(tmpl, total_nr, msg_id, options):
 
     return msg
 
-
 def __build_message(tmpl, patch, patch_nr, total_nr, msg_id, ref_id, options):
     """Build the message to be sent via SMTP
     """
@@ -180,6 +205,10 @@ def __build_message(tmpl, patch, patch_nr, total_nr, msg_id, ref_id, options):
     long_descr = reduce(lambda x, y: x + '\n' + y,
                         descr_lines[1:], '').lstrip()
 
+    maintainer = __get_maintainer()
+    if not maintainer:
+        maintainer = '%s <%s>' % (p.get_commname(), p.get_commemail())
+
     headers_end = ''
     if options.to:
         headers_end += 'To: %s\n' % options.to
@@ -194,8 +223,13 @@ def __build_message(tmpl, patch, patch_nr, total_nr, msg_id, ref_id, options):
 
     total_nr_str = str(total_nr)
     patch_nr_str = str(patch_nr).zfill(len(total_nr_str))
+    if total_nr > 1:
+        number_str = ' %s/%s' % (patch_nr_str, total_nr_str)
+    else:
+        number_str = ''
 
     tmpl_dict = {'patch':        patch,
+                 'maintainer':   maintainer,
                  'shortdescr':   short_descr,
                  'longdescr':    long_descr,
                  'endofheaders': headers_end,
@@ -206,6 +240,7 @@ def __build_message(tmpl, patch, patch_nr, total_nr, msg_id, ref_id, options):
                  'date':         email.Utils.formatdate(localtime = True),
                  'patchnr':      patch_nr_str,
                  'totalnr':      total_nr_str,
+                 'number':       number_str,
                  'authname':     p.get_authname(),
                  'authemail':    p.get_authemail(),
                  'authdate':     p.get_authdate(),
@@ -226,7 +261,6 @@ def __build_message(tmpl, patch, patch_nr, total_nr, msg_id, ref_id, options):
 
     return msg
 
-
 def func(parser, options, args):
     """Send the patches by e-mail using the patchmail.tmpl file as
     a template