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)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 13 Nov 2024 19:48:10 +0000 (19:48 +0000)
commita07693cda5f68f69e9560cd40277c977faf73743
treeee8581289d627a2526314dd84f48e495f90efc66
parentc89c5d04f33dbc5c6dfb67b8bc58cbd3d924b434
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"
                )

(cherry picked from commit 597c6cc1195a986e8f89921aa89505b0eacf8181)
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