aboutsummaryrefslogtreecommitdiff
path: root/b4/mbox.py
diff options
context:
space:
mode:
authorKonstantin Ryabitsev <konstantin@linuxfoundation.org>2021-09-30 10:35:10 -0400
committerKonstantin Ryabitsev <konstantin@linuxfoundation.org>2021-09-30 10:35:10 -0400
commit0f46d4c8bf35c7762e96271e7061d42e8dae79e4 (patch)
tree67525e61f5a0f42e37ebf34a9f082d40c75da2d7 /b4/mbox.py
parent9a81f80ee58f61d133391264a303f7f815404d4c (diff)
downloadb4-0f46d4c8bf35c7762e96271e7061d42e8dae79e4.tar.gz
shazam: implement custom merge message templates
Allow people to set up their own preferred merge templates, using the netdev standard as default. Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Diffstat (limited to 'b4/mbox.py')
-rw-r--r--b4/mbox.py55
1 files changed, 42 insertions, 13 deletions
diff --git a/b4/mbox.py b/b4/mbox.py
index 00b683d..50dd2c3 100644
--- a/b4/mbox.py
+++ b/b4/mbox.py
@@ -27,9 +27,19 @@ import xml.etree.ElementTree
import b4
from typing import Optional, Tuple
+from string import Template
logger = b4.logger
+DEFAULT_MERGE_TEMPLATE = """Merge ${patch_or_series} "${seriestitle}"
+
+${authorname} <${authoremail}> says:
+====================
+${coverletter}
+====================
+Link: ${midurl}
+"""
+
def make_am(msgs, cmdargs, msgid):
config = b4.get_main_config()
@@ -309,27 +319,46 @@ def make_am(msgs, cmdargs, msgid):
new_contents = contents.replace(gwt, mmsg)
if new_contents != contents:
with open(fhf, 'w') as fhh:
- fhh.write(contents)
+ fhh.write(new_contents)
+
+ mmf = os.path.join(topdir, '.git', 'b4-cover')
if lser.has_cover:
+ merge_template = DEFAULT_MERGE_TEMPLATE
+ if config.get('shazam-merge-template'):
+ # Try to load this template instead
+ try:
+ merge_template = b4.read_template(config['shazam-merge-template'])
+ except FileNotFoundError:
+ logger.critical('ERROR: shazam-merge-template says to use %s, but it does not exist',
+ config['shazam-merge-template'])
+ sys.exit(2)
+
# Write out a sample merge message using the cover letter
- mmf = os.path.join(topdir, '.git', 'b4-cover')
cmsg = lser.patches[0]
parts = b4.LoreMessage.get_body_parts(cmsg.body)
+ tptvals = {
+ 'seriestitle': cmsg.subject,
+ 'authorname': cmsg.fromname,
+ 'authoremail': cmsg.fromemail,
+ 'coverletter': parts[1],
+ 'midurl': linkurl,
+ }
+ if len(am_msgs) > 1:
+ tptvals['patch_or_series'] = 'patch series'
+ else:
+ tptvals['patch_or_series'] = 'patch'
+
+ body = Template(merge_template).safe_substitute(tptvals)
with open(mmf, 'w') as mmh:
- mmh.write('Merge %s\n\n' % mmsg)
- if len(am_msgs) > 1:
- mmh.write('Accept %d patches from %s <%s>\n\n' % (len(am_msgs), cmsg.fromname, cmsg.fromemail))
- else:
- mmh.write('Accept patch from %s <%s>\n\n' % (cmsg.fromname, cmsg.fromemail))
- mmh.write('%s\n' % cmsg.subject)
- mmh.write('=' * len(cmsg.subject) + '\n')
- mmh.write(parts[1])
- mmh.write('=' * len(cmsg.subject) + '\n')
- mmh.write('Link: %s\n' % linkurl)
+ mmh.write(body)
+
+ elif os.path.exists(mmf):
+ # Make sure any old cover letters don't confuse anyone
+ os.unlink(mmf)
logger.info('You can now merge or checkout FETCH_HEAD')
if lser.has_cover:
- logger.info(' e.g.: git merge -F .git/b4-cover --edit FETCH_HEAD')
+ logger.info(' e.g.: git merge -F .git/b4-cover --signoff --edit FETCH_HEAD')
thanks_record_am(lser, cherrypick=cherrypick)
return