From 01a60a10db65865d7e05765d84a9939820aebc1e Mon Sep 17 00:00:00 2001 From: Ross Burton Date: Fri, 30 Apr 2021 15:23:21 +0100 Subject: [PATCH] scripts: add tool to generate a layer overview Change-Id: Icb4e29d80f1db9791ce801910563695c9fdc76b3 Signed-off-by: Ross Burton Signed-off-by: Jon Mason --- scripts/layer-overview.py | 52 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100755 scripts/layer-overview.py diff --git a/scripts/layer-overview.py b/scripts/layer-overview.py new file mode 100755 index 00000000..24a9a5b6 --- /dev/null +++ b/scripts/layer-overview.py @@ -0,0 +1,52 @@ +#! /usr/bin/env python3 + +""" +Print an overview of the layer to help writing release notes. + +Output includes sublayers, machines, recipes. +""" + +# TODO: +# - More human-readable output +# - Diff mode, give two revisions and list the changes +# - Support finding no sublayers, meaning the path is a single layer + +import argparse +parser = argparse.ArgumentParser() +parser.add_argument("repository") +parser.add_argument("revision", nargs="?") +args = parser.parse_args() + +if args.revision: + import gitpathlib + base = gitpathlib.GitPath(args.repository, args.revision) +else: + import pathlib + base = pathlib.Path(args.repository) + +print("Sub-Layers") +sublayers = sorted(p for p in base.glob("meta-*") if p.is_dir()) +for l in sublayers: + print(f" {l.name}") +print() + +for layer in sublayers: + print(layer.name) + + machines = sorted(p for p in layer.glob("conf/machine/*.conf")) + if machines: + print(" Machines") + for m in machines: + print(f" {m.stem}") + print() + + recipes = sorted((p for p in layer.glob("recipes-*/*/*.bb")), key=lambda p:p.name) + if recipes: + print(" Recipes") + for r in recipes: + if "_" in r.stem: + pn, pv = r.stem.rsplit("_", 1) + print(f" {pn} {pv}") + else: + print(f" {r.stem}") + print()