aboutsummaryrefslogtreecommitdiff
path: root/b4/mbox.py
diff options
context:
space:
mode:
authorKonstantin Ryabitsev <konstantin@linuxfoundation.org>2020-05-07 15:59:09 -0400
committerKonstantin Ryabitsev <konstantin@linuxfoundation.org>2020-05-07 15:59:09 -0400
commitd85fa243e03624cd4c49484a47b20053b2a313a8 (patch)
tree9cab3406eb43d79d0e4101b5e9038fa317933858 /b4/mbox.py
parent9ead0d56c5f282d700181873b185c4e868f09350 (diff)
downloadb4-d85fa243e03624cd4c49484a47b20053b2a313a8.tar.gz
Add -P,--cherry-pick option to "b4 am"
This lets someone select a subset of patches in a series, e.g.: b4 am -P 1-3,5,7- [msgid] Suggested-by: Heiko Stübner <heiko@sntech.de> Signed-off-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Diffstat (limited to 'b4/mbox.py')
-rw-r--r--b4/mbox.py32
1 files changed, 22 insertions, 10 deletions
diff --git a/b4/mbox.py b/b4/mbox.py
index 45f78f7..91085e3 100644
--- a/b4/mbox.py
+++ b/b4/mbox.py
@@ -66,15 +66,22 @@ def mbox_to_am(mboxfile, cmdargs):
os.unlink(am_filename)
logger.info('---')
+ if cmdargs.cherrypick:
+ cherrypick = list(b4.parse_int_range(cmdargs.cherrypick, upper=len(lser.patches)-1))
+ else:
+ cherrypick = None
logger.critical('Writing %s', am_filename)
mbx = mailbox.mbox(am_filename)
am_mbx = lser.save_am_mbox(mbx, cmdargs.noaddtrailers, covertrailers,
trailer_order=config['trailer-order'],
addmysob=cmdargs.addmysob, addlink=cmdargs.addlink,
- linkmask=config['linkmask'])
+ linkmask=config['linkmask'], cherrypick=cherrypick)
logger.info('---')
- logger.critical('Total patches: %s', len(am_mbx))
+ if cherrypick is None:
+ logger.critical('Total patches: %s', len(am_mbx))
+ else:
+ logger.info('Total patches: %s (cherrypicked: %s)', len(am_mbx), cmdargs.cherrypick)
if lser.has_cover and lser.patches[0].followup_trailers and not covertrailers:
# Warn that some trailers were sent to the cover letter
logger.critical('---')
@@ -172,12 +179,12 @@ def mbox_to_am(mboxfile, cmdargs):
logger.critical(' git am %s', am_filename)
am_mbx.close()
- thanks_record_am(lser)
+ thanks_record_am(lser, cherrypick=cherrypick)
return am_filename
-def thanks_record_am(lser):
+def thanks_record_am(lser, cherrypick=None):
if not lser.complete:
logger.debug('Incomplete series, not tracking for thanks')
return
@@ -186,13 +193,18 @@ def thanks_record_am(lser):
datadir = b4.get_data_dir()
slug = lser.get_slug(extended=True)
filename = '%s.am' % slug
- # Check if we're tracking it already
- for entry in os.listdir(datadir):
- if entry == filename:
- return
patches = list()
+ at = 0
for pmsg in lser.patches[1:]:
+ at += 1
+ if pmsg is None:
+ continue
+
+ if cherrypick is not None and at not in cherrypick:
+ logger.debug('Skipped non-cherrypicked: %s', at)
+ continue
+
pmsg.load_hashes()
if pmsg.attestation is None:
logger.debug('Unable to get hashes for all patches, not tracking for thanks')
@@ -203,8 +215,8 @@ def thanks_record_am(lser):
if lmsg is None:
lmsg = lser.patches[1]
- allto = email.utils.getaddresses([b4.LoreMessage.clean_header(x) for x in lmsg.msg.get_all('to', [])])
- allcc = email.utils.getaddresses([b4.LoreMessage.clean_header(x) for x in lmsg.msg.get_all('cc', [])])
+ allto = email.utils.getaddresses([str(x) for x in lmsg.msg.get_all('to', [])])
+ allcc = email.utils.getaddresses([str(x) for x in lmsg.msg.get_all('cc', [])])
out = {
'msgid': lmsg.msgid,