mirror of
https://github.com/arsenetar/dupeguru.git
synced 2024-10-29 21:05:57 +00:00
76 lines
2.9 KiB
Python
76 lines
2.9 KiB
Python
# Copyright 2018 Virgil Dupras
|
|
#
|
|
# This software is licensed under the "GPLv3" License as described in the "LICENSE" file,
|
|
# which should be included with this package. The terms are also available at
|
|
# http://www.gnu.org/licenses/gpl-3.0.html
|
|
|
|
from pathlib import Path
|
|
import re
|
|
from typing import Callable, Dict, Union
|
|
|
|
from hscommon.build import read_changelog_file, filereplace
|
|
from sphinx.cmd.build import build_main as sphinx_build
|
|
|
|
CHANGELOG_FORMAT = """
|
|
{version} ({date})
|
|
----------------------
|
|
|
|
{description}
|
|
"""
|
|
|
|
|
|
def tixgen(tixurl: str) -> Callable[[str], str]:
|
|
"""This is a filter *generator*. tixurl is a url pattern for the tix with a {0} placeholder
|
|
for the tix #
|
|
"""
|
|
urlpattern = tixurl.format("\\1") # will be replaced buy the content of the first group in re
|
|
R = re.compile(r"#(\d+)")
|
|
repl = f"`#\\1 <{urlpattern}>`__"
|
|
return lambda text: R.sub(repl, text)
|
|
|
|
|
|
def gen(
|
|
basepath: Path,
|
|
destpath: Path,
|
|
changelogpath: Path,
|
|
tixurl: str,
|
|
confrepl: Union[Dict[str, str], None] = None,
|
|
confpath: Union[Path, None] = None,
|
|
changelogtmpl: Union[Path, None] = None,
|
|
) -> None:
|
|
"""Generate sphinx docs with all bells and whistles.
|
|
|
|
basepath: The base sphinx source path.
|
|
destpath: The final path of html files
|
|
changelogpath: The path to the changelog file to insert in changelog.rst.
|
|
tixurl: The URL (with one formattable argument for the tix number) to the ticket system.
|
|
confrepl: Dictionary containing replacements that have to be made in conf.py. {name: replacement}
|
|
"""
|
|
if confrepl is None:
|
|
confrepl = {}
|
|
if confpath is None:
|
|
confpath = Path(basepath, "conf.tmpl")
|
|
if changelogtmpl is None:
|
|
changelogtmpl = Path(basepath, "changelog.tmpl")
|
|
changelog = read_changelog_file(changelogpath)
|
|
tix = tixgen(tixurl)
|
|
rendered_logs = []
|
|
for log in changelog:
|
|
description = tix(log["description"])
|
|
# The format of the changelog descriptions is in markdown, but since we only use bulled list
|
|
# and links, it's not worth depending on the markdown package. A simple regexp suffice.
|
|
description = re.sub(r"\[(.*?)\]\((.*?)\)", "`\\1 <\\2>`__", description)
|
|
rendered = CHANGELOG_FORMAT.format(version=log["version"], date=log["date_str"], description=description)
|
|
rendered_logs.append(rendered)
|
|
confrepl["version"] = changelog[0]["version"]
|
|
changelog_out = Path(basepath, "changelog.rst")
|
|
filereplace(changelogtmpl, changelog_out, changelog="\n".join(rendered_logs))
|
|
if Path(confpath).exists():
|
|
conf_out = Path(basepath, "conf.py")
|
|
filereplace(confpath, conf_out, **confrepl)
|
|
# Call the sphinx_build function, which is the same as doing sphinx-build from cli
|
|
try:
|
|
sphinx_build([str(basepath), str(destpath)])
|
|
except SystemExit:
|
|
print("Sphinx called sys.exit(), but we're cancelling it because we don't actually want to exit")
|