armbian-build/lib/tools/common/b4_caller.py

76 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2023 Ricardo Pardini <ricardo@pardini.net>
# This file is a part of the Armbian Build Framework https://github.com/armbian/build/
#
import argparse
import logging
import b4
import b4.mbox
log: logging.Logger = logging.getLogger("b4_caller")
#
# Automatic grabbing of patches from mailing lists, using 'b4' tool 'am' command.
# Patches will be grabbed and written to disk in the order they are listed here, before any other processing is done.
#b4-am:
# - { prefix: "0666", lore: "https://lore.kernel.org/r/20230706-topic-amlogic-upstream-dt-fixes-take3-v1-0-63ed070eeab2@linaro.org" }
def get_patch_via_b4(lore_link):
# Fool get_msgid with a fake argparse.Namespace
msgid_args = argparse.Namespace()
msgid_args.msgid = lore_link
msgid = b4.get_msgid(msgid_args)
log.debug(f"msgid: {msgid}")
msgs = b4.get_pi_thread_by_msgid(msgid)
count = len(msgs)
log.debug('Analyzing %s messages in the thread', count)
lmbx = b4.LoreMailbox()
for msg in msgs:
lmbx.add_message(msg)
lser = lmbx.get_series()
# hack at the "main config" to avoid attestation etc; b4's config is a global MAIN_CONFIG
config = b4.get_main_config()
config['attestation-policy'] = "off"
# hack at the "user config", since there is not really an user here; its a global USER_CONFIG
uconfig = b4.get_user_config()
uconfig['name'] = "Armbian Autopatcher"
uconfig['email'] = "auto.patcher@next.armbian.com"
log.debug(f"uconfig: {uconfig}")
# prepare for git am
am_msgs = lser.get_am_ready(addlink=True, linkmask='https://lore.kernel.org/r/%s')
log.debug('Total patches: %s', len(am_msgs))
top_msgid = None
for lmsg in lser.patches:
if lmsg is not None:
top_msgid = lmsg.msgid
break
if top_msgid is None:
raise Exception(f"Could not find any patches in the series '{lore_link}'.")
# slug for possibly naming the file
slug = lser.get_slug(extended=True)
log.debug('slug: %s', slug)
# final contents of patch file for our purposes
body = b''
for msg in am_msgs:
body += b'From git@z Thu Jan 1 00:00:00 1970\n' # OH! the b4-marker!
body += b4.LoreMessage.get_msg_as_bytes(msg, headers='decode')
log.info("Done")
return {"body": body, "slug": slug}