From: Jörg Behrmann Date: Thu, 5 Sep 2024 14:52:01 +0000 (+0200) Subject: initrd: add --show-documentation option X-Git-Tag: v25~311^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F2990%2Fhead;p=thirdparty%2Fmkosi.git initrd: add --show-documentation option --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index a347e9cf4..c12f6268a 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -55,6 +55,7 @@ from mkosi.config import ( Compression, Config, ConfigFeature, + DocFormat, JsonEncoder, KeySourceType, ManifestFormat, @@ -3921,7 +3922,9 @@ def run_verb(args: Args, images: Sequence[Config], *, resources: Path) -> None: return print_completion(args, resources=resources) if args.verb == Verb.documentation: - return show_docs(args, resources=resources) + manual = args.cmdline[0] if args.cmdline else "mkosi" + formats: list[DocFormat] = [args.doc_format] if args.doc_format != DocFormat.auto else DocFormat.all() + return show_docs(manual, formats, resources=resources, pager=args.pager) if args.verb == Verb.genkey: return generate_key_cert_pair(args) diff --git a/mkosi/config.py b/mkosi/config.py index 001300c1a..e25eecab2 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -247,6 +247,12 @@ class DocFormat(StrEnum): pandoc = enum.auto() system = enum.auto() + @classmethod + def all(cls) -> list["DocFormat"]: + # this excludes auto and encodes the order in which these should be + # checked when searching for docs + return [cls.man, cls.pandoc, cls.markdown, cls.system] + class Bootloader(StrEnum): none = enum.auto() diff --git a/mkosi/documentation.py b/mkosi/documentation.py index e081d036b..f1b39d11e 100644 --- a/mkosi/documentation.py +++ b/mkosi/documentation.py @@ -4,20 +4,13 @@ import logging import subprocess from pathlib import Path -from mkosi.config import Args, DocFormat +from mkosi.config import DocFormat from mkosi.log import die from mkosi.pager import page from mkosi.run import find_binary, run -def show_docs(args: Args, *, resources: Path) -> None: - if args.doc_format == DocFormat.auto: - formats = [DocFormat.man, DocFormat.pandoc, DocFormat.markdown, DocFormat.system] - else: - formats = [args.doc_format] - - manual = args.cmdline[0] if args.cmdline else "mkosi" - +def show_docs(manual: str, formats: list[DocFormat], *, resources: Path, pager: bool = True) -> None: while formats: form = formats.pop(0) try: @@ -39,7 +32,7 @@ def show_docs(args: Args, *, resources: Path) -> None: run(["man", "--local-file", "-"], input=pandoc.stdout) return elif form == DocFormat.markdown: - page((resources / f"man/{manual}.md").read_text(), args.pager) + page((resources / f"man/{manual}.md").read_text(), pager) return elif form == DocFormat.system: run(["man", manual], log=False) diff --git a/mkosi/initrd.py b/mkosi/initrd.py index c3fe84887..6a8d569db 100644 --- a/mkosi/initrd.py +++ b/mkosi/initrd.py @@ -8,11 +8,14 @@ import sys import tempfile from pathlib import Path -from mkosi.config import OutputFormat +import mkosi.resources +from mkosi.config import DocFormat, OutputFormat +from mkosi.documentation import show_docs from mkosi.log import log_setup from mkosi.run import find_binary, run, uncaught_exception_handler from mkosi.sandbox import __version__ from mkosi.types import PathString +from mkosi.util import resource_path @uncaught_exception_handler() @@ -62,6 +65,12 @@ def main() -> None: action="store_true", default=False, ) + parser.add_argument( + "-D", "--show-documentation", + help="Show the man page", + action="store_true", + default=False, + ) parser.add_argument( "--version", action="version", @@ -70,6 +79,11 @@ def main() -> None: args = parser.parse_args() + if args.show_documentation: + with resource_path(mkosi.resources) as r: + show_docs("mkosi-initrd", DocFormat.all(), resources=r) + return + cmdline: list[PathString] = [ "mkosi", "--force",