#! /usr/bin/env python3 """ Print an overview of the layer to help writing release notes. Output includes sublayers, machines, recipes. """ import argparse import sys # TODO: # - More human-readable output # - Diff mode, give two revisions and list the changes def is_layer(path): """ Determine if this path looks like a layer (is a directory and contains conf/layer.conf). """ return path.is_dir() and (path / "conf" / "layer.conf").exists() def print_layer(layer): """ Print a summary of the layer. """ 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() 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) if is_layer(base): print_layer(base) else: sublayers = sorted(p for p in base.glob("meta-*") if is_layer(p)) if sublayers: print("Sub-Layers") for l in sublayers: print(f" {l.name}") print() for layer in sublayers: print_layer(layer) else: print(f"No layers found in {base}", file=sys.stderr) sys.exit(1)