man: fix incorrect volume numbers in internal man page references
authorŠtěpán Němec <stepnem@smrk.net>
Mon, 11 Nov 2024 19:10:00 +0000 (20:10 +0100)
committerŠtěpán Němec <stepnem@smrk.net>
Mon, 11 Nov 2024 19:31:08 +0000 (20:31 +0100)
commit597c6cc1195a986e8f89921aa89505b0eacf8181
tree050bb5c7ff42d8b918c01b7109449b6912c50e62
parent3304a029b847e87da51f7a8ad8c118111508e009
man: fix incorrect volume numbers in internal man page references

Some ambiguity (e.g., same-named man pages in multiple volumes)
makes it impossible to fully automate this, but the following
Python snippet (run inside the man/ directory of the systemd repo)
helped to generate the sed command lines (which were subsequently
manually reviewed, run and the false positives reverted):

from pathlib import Path

import lxml
from lxml import etree as ET

man2vol: dict[str, str] = {}
man2citerefs: dict[str, list] = {}

for file in Path(".").glob("*.xml"):
    tree = ET.parse(file, lxml.etree.XMLParser(recover=True))
    meta = tree.find("refmeta")
    if meta is not None:
        title = meta.findtext("refentrytitle")
        if title is not None:
            vol = meta.findtext("manvolnum")
            if vol is not None:
                man2vol[title] = vol
            citerefs = list(tree.iter("citerefentry"))
            if citerefs:
                man2citerefs[title] = citerefs

for man, refs in man2citerefs.items():
    for ref in refs:
        title = ref.findtext("refentrytitle")
        if title is not None:
            has = ref.findtext("manvolnum")
            try:
                should_have = man2vol[title]
            except KeyError:  # Non-systemd man page reference?  Ignore.
                continue
            if has != should_have:
                print(
                    f"sed -i '\\|<citerefentry><refentrytitle>{title}"
                    f"</refentrytitle><manvolnum>{has}</manvolnum>"
                    f"</citerefentry>|s|<manvolnum>{has}</manvolnum>|"
                    f"<manvolnum>{should_have}</manvolnum>|' {man}.xml"
                )
27 files changed:
man/crypttab.xml
man/journal-upload.conf.xml
man/libsystemd.xml
man/nss-resolve.xml
man/org.freedesktop.hostname1.xml
man/org.freedesktop.systemd1.xml
man/sd-id128.xml
man/sd_bus_creds_get_pid.xml
man/sd_bus_message_new_signal.xml
man/sd_bus_message_verify_type.xml
man/sd_bus_reply_method_error.xml
man/sd_bus_reply_method_return.xml
man/sd_hwdb_new.xml
man/smbios-type-11.xml
man/systemd-cryptenroll.xml
man/systemd-makefs@.service.xml
man/systemd-random-seed.service.xml
man/systemd-repart.xml
man/systemd-run-generator.xml
man/systemd-sysext.xml
man/systemd.image-policy.xml
man/systemd.pcrlock.xml
man/systemd.special.xml
man/systemd.system-credentials.xml
man/systemd.unit.xml
man/systemd.v.xml
man/timesyncd.conf.xml