tools/make_old_docs_symlinks.py (25 lines of code) (raw):
# Make redirects for our old html files relative to the root to version specific content.
# See also ../docs/manual/src/README.md
#
# This is a "migration" script, so not run regularly and not by CI,
#
# We used to publish the entire site in the "root" - ie, we had/have
# `./Motiviation.html` - but we've moved to a versioned site, so this page is now
# at, eg, `./0.XX/Motiviation.html`.
# This script locates all such HTML files and replaces them with HTML which redirects
# to 0.27.
#
# Note:
# * We don't want a symlink as we want the browser to see the actual new URL.
# * We pin the redirects to 0.27 to try and be more future-proof for future doc refactors.
# It could be run again to update to a later version.
#
# It is designed to be run on a directory with the `gh-pages` branch checked out,
# and the result is then checked in and pushed.
import argparse
import os
paths = r"""
./Motivation.md
./Getting_started.md
./tutorial/Prerequisites.md ./tutorial/udl_file.md ./tutorial/Rust_scaffolding.md ./tutorial/foreign_language_bindings.md
./udl_file_spec.md ./udl/namespace.md ./udl/builtin_types.md ./udl/enumerations.md ./udl/structs.md
./udl/functions.md ./udl/errors.md ./udl/interfaces.md ./udl/callback_interfaces.md ./udl/ext_types.md
./udl/ext_types_external.md ./udl/custom_types.md ./udl/docstrings.md
./proc_macro/index.md
./futures.md
./bindings.md
./foreign_traits.md
./kotlin/configuration.md ./kotlin/gradle.md ./kotlin/lifetimes.md
./swift/overview.md ./swift/configuration.md ./swift/module.md ./swift/xcode.md
./python/configuration.md
./internals/design_principles.md ./internals/crates.md ./internals/lifting_and_lowering.md
./internals/object_references.md ./internals/rendering_foreign_bindings.md"""
redirect_template = r"""
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Redirecting.</title>
<noscript>
<meta http-equiv="refresh" content="1; url={target}/{path}" />
</noscript>
<script>
window.location.replace("{target}/{path}" + window.location.hash);
</script>
</head>
<body>
Redirecting to <a href="{target}/{path}">{target}/{path}</a>...
</body>
</html>
"""
def redirects(args):
target = "0.27"
for spec in paths.split():
path = os.path.splitext(os.path.normpath(spec))[0] + ".html"
fq = os.path.join(args.target, path)
if os.path.exists(fq):
new_content = redirect_template.format(path=path, target=target)
open(fq, "w").write(new_content)
print("Updated", path)
else:
print("html file does not exist:", path)
def main():
parser = argparse.ArgumentParser(description='UniFFI docs redirect helper')
subparsers = parser.add_subparsers(required=True)
parser_redirect = subparsers.add_parser('redirects', help='check redirects etc')
parser_redirect.set_defaults(func=redirects)
parser_redirect.add_argument('--target', type=str, required=True)
args = parser.parse_args()
args.func(args)
if __name__=='__main__':
main()