1
0
mirror of https://git.yoctoproject.org/meta-arm synced 2026-04-20 11:29:54 +00:00

scripts/machine-summary: refactor output to classes

To prepare for future expansion, refactor the output code to be delegated
to Format subclasses.

Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
This commit is contained in:
Ross Burton
2022-01-19 21:20:47 +00:00
committed by Jon Mason
parent cb29175ab4
commit 0d2d0fd691

View File

@@ -3,28 +3,12 @@
import argparse
import datetime
import os
import pathlib
import re
import sys
import jinja2
def get_template(name):
template_dir = os.path.dirname(os.path.abspath(__file__))
env = jinja2.Environment(
loader=jinja2.FileSystemLoader(template_dir),
autoescape=jinja2.select_autoescape(),
trim_blocks=True,
lstrip_blocks=True
)
def is_old(version, upstream):
if "+git" in version:
# strip +git and see if this is a post-release snapshot
version = version.replace("+git", "")
return version != upstream
env.tests["old"] = is_old
return env.get_template(f"machine-summary-{name}.jinja")
def trim_pv(pv):
"""
Strip anything after +git from the PV
@@ -126,19 +110,66 @@ recipes = ("virtual/kernel",
"gcc-aarch64-none-elf-native",
"gcc-arm-none-eabi-native")
class Format:
"""
The name of this format
"""
name = None
"""
Registry of names to classes
"""
registry = {}
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
assert cls.name
cls.registry[cls.name] = cls
@classmethod
def get_format(cls, name):
return cls.registry[name]()
def render(self, context, output: pathlib.Path):
# Default implementation for convenience
with open(output, "wt") as f:
f.write(self.get_template(f"machine-summary-{self.name}.jinja").render(context))
def get_template(self, name):
template_dir = os.path.dirname(os.path.abspath(__file__))
env = jinja2.Environment(
loader=jinja2.FileSystemLoader(template_dir),
autoescape=jinja2.select_autoescape(),
trim_blocks=True,
lstrip_blocks=True
)
def is_old(version, upstream):
if "+git" in version:
# strip +git and see if this is a post-release snapshot
version = version.replace("+git", "")
return version != upstream
env.tests["old"] = is_old
return env.get_template(name)
class TextOverview(Format):
name = "overview.txt"
class HtmlUpdates(Format):
name = "updates.html"
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="machine-summary")
parser.add_argument("machines", nargs="+", help="machine names", metavar="MACHINE")
parser.add_argument("-t", "--template", required=True)
parser.add_argument("-o", "--output", required=True, type=argparse.FileType('w', encoding='UTF-8'))
parser.add_argument("-t", "--type", required=True, choices=Format.registry.keys())
parser.add_argument("-o", "--output", type=pathlib.Path, required=True)
args = parser.parse_args()
template = get_template(args.template)
context = {}
# TODO: include git describe for meta-arm
context["timestamp"] = str(datetime.datetime.now().strftime("%c"))
context["recipes"] = sorted(recipes)
context["releases"], context["data"] = harvest_data(args.machines, recipes)
args.output.write(template.render(context))
formatter = Format.get_format(args.type)
formatter.render(context, args.output)