]> www.infradead.org Git - users/hch/misc.git/commitdiff
docs: add tools/docs/gen-redirects.py
authorVegard Nossum <vegard.nossum@oracle.com>
Fri, 5 Sep 2025 14:46:08 +0000 (16:46 +0200)
committerJonathan Corbet <corbet@lwn.net>
Tue, 9 Sep 2025 19:37:16 +0000 (13:37 -0600)
Add a new script and a new documentation 'make' target,
htmldocs-redirects.

This will generate HTML stub files in the HTML documentation output
directory that redirect the browser to the new path.

Suggested-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Suggested-by: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Message-ID: <20250905144608.577449-4-vegard.nossum@oracle.com>

Documentation/Makefile
Makefile
tools/docs/gen-redirects.py [new file with mode: 0755]

index 5c20c68be89ab77537c53946b0188d4a0d56c3de..3609cb86137b6e7866d290e92a071c0f9ff4b197 100644 (file)
@@ -108,6 +108,9 @@ htmldocs:
        @$(srctree)/scripts/sphinx-pre-install --version-check
        @+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,html,$(var),,$(var)))
 
+htmldocs-redirects: $(srctree)/Documentation/.renames.txt
+       @tools/docs/gen-redirects.py --output $(BUILDDIR) < $<
+
 # If Rust support is available and .config exists, add rustdoc generated contents.
 # If there are any, the errors from this make rustdoc will be displayed but
 # won't stop the execution of htmldocs
@@ -175,6 +178,7 @@ cleandocs:
 dochelp:
        @echo  ' Linux kernel internal documentation in different formats from ReST:'
        @echo  '  htmldocs        - HTML'
+       @echo  '  htmldocs-redirects - generate HTML redirects for moved pages'
        @echo  '  texinfodocs     - Texinfo'
        @echo  '  infodocs        - Info'
        @echo  '  latexdocs       - LaTeX'
index 6bfe776bf3c5ff0cf187dc6719dd5817cd4af2ca..d764afe3a30a811e930b49e4a63d38aca8bb8c22 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1799,8 +1799,9 @@ $(help-board-dirs): help-%:
 
 # Documentation targets
 # ---------------------------------------------------------------------------
-DOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
-              linkcheckdocs dochelp refcheckdocs texinfodocs infodocs
+DOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs htmldocs-redirects \
+              epubdocs cleandocs linkcheckdocs dochelp refcheckdocs \
+              texinfodocs infodocs
 PHONY += $(DOC_TARGETS)
 $(DOC_TARGETS):
        $(Q)$(MAKE) $(build)=Documentation $@
diff --git a/tools/docs/gen-redirects.py b/tools/docs/gen-redirects.py
new file mode 100755 (executable)
index 0000000..6a6ebf6
--- /dev/null
@@ -0,0 +1,54 @@
+#! /usr/bin/env python3
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright © 2025, Oracle and/or its affiliates.
+# Author: Vegard Nossum <vegard.nossum@oracle.com>
+
+"""Generate HTML redirects for renamed Documentation/**.rst files using
+the output of tools/docs/gen-renames.py.
+
+Example:
+
+    tools/docs/gen-redirects.py --output Documentation/output/ < Documentation/.renames.txt
+"""
+
+import argparse
+import os
+import sys
+
+parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
+parser.add_argument('-o', '--output', help='output directory')
+
+args = parser.parse_args()
+
+for line in sys.stdin:
+    line = line.rstrip('\n')
+
+    old_name, new_name = line.split(' ', 2)
+
+    old_html_path = os.path.join(args.output, old_name + '.html')
+    new_html_path = os.path.join(args.output, new_name + '.html')
+
+    if not os.path.exists(new_html_path):
+        print(f"warning: target does not exist: {new_html_path} (redirect from {old_html_path})")
+        continue
+
+    old_html_dir = os.path.dirname(old_html_path)
+    if not os.path.exists(old_html_dir):
+        os.makedirs(old_html_dir)
+
+    relpath = os.path.relpath(new_name, os.path.dirname(old_name)) + '.html'
+
+    with open(old_html_path, 'w') as f:
+        print(f"""\
+<!DOCTYPE html>
+
+<html lang="en">
+<head>
+    <title>This page has moved</title>
+    <meta http-equiv="refresh" content="0; url={relpath}">
+</head>
+<body>
+<p>This page has moved to <a href="{relpath}">{new_name}</a>.</p>
+</body>
+</html>""", file=f)