When sending e-mails, it is easier to automatically invoke the editor on
the cover message than writing it separately. This patch renames the
--first option to --cover and allows a --edit option to edit the final
message before sending it. With --edit only, the tool will use the default
template in .git/covermail.tmpl or
/usr/share/stgit/templates/covermail.tmpl.
Signed-off-by: Catalin Marinas <catalin.marinas@gmail.com>
+++ /dev/null
-From: Your Name <your.name@yourcompany.com>
-To: Some Address <some.address@somelist.com>
-Cc: other.address@otherlist.com, other.person@othercompany.com
-Bcc: Your Name <your.name@yourcompany.com>
-Subject: [PATCH%(version)s%(number)s] Series short description
-Date: %(date)s
-%(endofheaders)s
-The following series implements...
-
---
-Your signature
can either be added to the template file or passed via the
corresponding command line options.
can either be added to the template file or passed via the
corresponding command line options.
-A preamble e-mail can be sent using the '--first' option. All the
-subsequent e-mails appear as replies to the first e-mail sent (either
-the preamble or the first patch). E-mails can be seen as replies to a
-different e-mail by using the '--refid' option.
+A preamble e-mail can be sent using the '--cover' and/or '--edit'
+options. The first allows the user to specify a file to be used as a
+template. The latter option will invoke the editor on the specified
+file (defaulting to .git/covermail.tmpl or
+/usr/share/stgit/templates/covermail.tmpl).
+
+All the subsequent e-mails appear as replies to the first e-mail sent
+(either the preamble or the first patch). E-mails can be seen as
+replies to a different e-mail by using the '--refid' option.
SMTP authentication is also possible with '--smtp-user' and
'--smtp-password' options, also available as configuration settings:
SMTP authentication is also possible with '--smtp-user' and
'--smtp-password' options, also available as configuration settings:
help = 'add VERSION to the [PATCH ...] prefix'),
make_option('-t', '--template', metavar = 'FILE',
help = 'use FILE as the message template'),
help = 'add VERSION to the [PATCH ...] prefix'),
make_option('-t', '--template', metavar = 'FILE',
help = 'use FILE as the message template'),
- make_option('-f', '--first', metavar = 'FILE',
- help = 'send FILE as the first message'),
+ make_option('-c', '--cover', metavar = 'FILE',
+ help = 'send FILE as the cover message'),
+ make_option('-e', '--edit',
+ help = 'edit the cover message before sending',
+ action = 'store_true'),
make_option('-s', '--sleep', type = 'int', metavar = 'SECONDS',
help = 'sleep for SECONDS between e-mails sending'),
make_option('--refid',
make_option('-s', '--sleep', type = 'int', metavar = 'SECONDS',
help = 'sleep for SECONDS between e-mails sending'),
make_option('--refid',
headers_end = headers_end[:-1] + '\n'
return headers_end
headers_end = headers_end[:-1] + '\n'
return headers_end
-def __build_first(tmpl, total_nr, msg_id, options):
- """Build the first message (series description) to be sent via SMTP
+def __build_cover(tmpl, total_nr, msg_id, options):
+ """Build the cover message (series description) to be sent via SMTP
"""
maintainer = __get_maintainer()
if not maintainer:
"""
maintainer = __get_maintainer()
if not maintainer:
raise CmdException, 'Only "%(name)s" variables are ' \
'supported in the patch template'
raise CmdException, 'Only "%(name)s" variables are ' \
'supported in the patch template'
+ if options.edit:
+ fname = '.stgitmail.txt'
+
+ # create the initial file
+ f = file(fname, 'w+')
+ f.write(msg)
+ f.close()
+
+ # the editor
+ if config.has_option('stgit', 'editor'):
+ editor = config.get('stgit', 'editor')
+ elif 'EDITOR' in os.environ:
+ editor = os.environ['EDITOR']
+ else:
+ editor = 'vi'
+ editor += ' %s' % fname
+
+ print 'Invoking the editor: "%s"...' % editor,
+ sys.stdout.flush()
+ print 'done (exit code: %d)' % os.system(editor)
+
+ # read the message back
+ f = file(fname)
+ msg = f.read()
+ f.close()
+
return msg
def __build_message(tmpl, patch, patch_nr, total_nr, msg_id, ref_id, options):
return msg
def __build_message(tmpl, patch, patch_nr, total_nr, msg_id, ref_id, options):
- # send the first message (if any)
- if options.first:
- tmpl = file(options.first).read()
+ # send the cover message (if any)
+ if options.cover or options.edit:
+ # find the template file
+ if options.cover:
+ tfile_list = [options.cover]
+ else:
+ tfile_list = [os.path.join(git.base_dir, 'covermail.tmpl'),
+ os.path.join(sys.prefix,
+ 'share/stgit/templates/covermail.tmpl')]
+
+ tmpl = None
+ for tfile in tfile_list:
+ if os.path.isfile(tfile):
+ tmpl = file(tfile).read()
+ break
+ if not tmpl:
+ raise CmdException, 'No cover message template file found'
msg_id = email.Utils.make_msgid('stgit')
msg_id = email.Utils.make_msgid('stgit')
- msg = __build_first(tmpl, total_nr, msg_id, options)
+ msg = __build_cover(tmpl, total_nr, msg_id, options)
from_addr, to_addr_list = __parse_addresses(msg)
# subsequent e-mails are seen as replies to the first one
ref_id = msg_id
from_addr, to_addr_list = __parse_addresses(msg)
# subsequent e-mails are seen as replies to the first one
ref_id = msg_id
- print 'Sending file "%s"...' % options.first,
+ print 'Sending the cover message...',
sys.stdout.flush()
__send_message(smtpserver, from_addr, to_addr_list, msg, sleep,
sys.stdout.flush()
__send_message(smtpserver, from_addr, to_addr_list, msg, sleep,
if options.template:
tfile_list = [options.template]
else:
if options.template:
tfile_list = [options.template]
else:
- tfile_list = []
-
- tfile_list += [os.path.join(git.base_dir, 'patchmail.tmpl'),
- os.path.join(sys.prefix,
- 'share/stgit/templates/patchmail.tmpl')]
+ tfile_list = [os.path.join(git.base_dir, 'patchmail.tmpl'),
+ os.path.join(sys.prefix,
+ 'share/stgit/templates/patchmail.tmpl')]
tmpl = None
for tfile in tfile_list:
if os.path.isfile(tfile):
tmpl = file(tfile).read()
break
if not tmpl:
tmpl = None
for tfile in tfile_list:
if os.path.isfile(tfile):
tmpl = file(tfile).read()
break
if not tmpl:
- raise CmdException, 'No e-mail template file: %s or %s' \
- % (tfile_list[-1], tfile_list[-2])
+ raise CmdException, 'No e-mail template file found'
for (p, patch_nr) in zip(patches, range(1, len(patches) + 1)):
msg_id = email.Utils.make_msgid('stgit')
for (p, patch_nr) in zip(patches, range(1, len(patches) + 1)):
msg_id = email.Utils.make_msgid('stgit')
--- /dev/null
+From: %(maintainer)s
+Subject: [PATCH%(version)s%(number)s] Series short description
+Date: %(date)s
+%(endofheaders)s
+The following series implements...
+
+--
+Signature