fix(build): Only change VersionDirective if supported

The VersionChange class is not available in older versions of sphinx, so
we just disable it

Fixes #2356
This commit is contained in:
patrick96 2021-01-19 10:42:27 +01:00 committed by Patrick Ziegler
parent fdc670a9dd
commit 6b1c5489a2
2 changed files with 29 additions and 19 deletions

View File

@ -9,6 +9,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased] ## [Unreleased]
### Build
- Support older python sphinx versions again ([`#2356`](https://github.com/polybar/polybar/issues/2356))
## [3.5.4] - 2021-01-07 ## [3.5.4] - 2021-01-07
### Fixed ### Fixed

View File

@ -15,9 +15,7 @@
import os import os
from pathlib import Path from pathlib import Path
import datetime import datetime
from typing import List import sphinx
from docutils.nodes import Node
from sphinx.domains.changeset import VersionChange
import packaging.version import packaging.version
def get_version(root_path): def get_version(root_path):
@ -32,8 +30,6 @@ def get_version(root_path):
raise RuntimeError("No version found in {}".format(path)) raise RuntimeError("No version found in {}".format(path))
# -- Project information ----------------------------------------------------- # -- Project information -----------------------------------------------------
project = 'Polybar User Manual' project = 'Polybar User Manual'
@ -221,20 +217,32 @@ epub_exclude_files = ['search.html']
# The 'versionadded' and 'versionchanged' directives are overridden. # The 'versionadded' and 'versionchanged' directives are overridden.
suppress_warnings = ['app.add_directive'] suppress_warnings = ['app.add_directive']
def setup(app): # It is not exactly clear in which version the VersionChange class was
app.add_directive('deprecated', VersionDirective) # introduced, but we know it is available in at least 1.8.5.
app.add_directive('versionadded', VersionDirective) # This feature is mainly needed for the online docs on readthedocs for the docs
app.add_directive('versionchanged', VersionDirective) # built from master, documentation built for proper releases should not even
# mention unreleased changes. Because of that it's not that important that this
# is added to local builds.
if packaging.version.parse(sphinx.__version__) >= packaging.version.parse("1.8.5"):
class VersionDirective(VersionChange): from typing import List
""" from docutils.nodes import Node
Overwrites the Sphinx directive for versionchanged, versionadded, and from sphinx.domains.changeset import VersionChange
deprecated and adds an unreleased tag to versions that are not yet released
"""
def run(self) -> List[Node]:
directive_version = packaging.version.parse(self.arguments[0])
if directive_version > version_txt: def setup(app):
self.arguments[0] += " (unreleased)" app.add_directive('deprecated', VersionDirective)
app.add_directive('versionadded', VersionDirective)
app.add_directive('versionchanged', VersionDirective)
return super().run() class VersionDirective(VersionChange):
"""
Overwrites the Sphinx directive for versionchanged, versionadded, and
deprecated and adds an unreleased tag to versions that are not yet released
"""
def run(self) -> List[Node]:
directive_version = packaging.version.parse(self.arguments[0])
if directive_version > version_txt:
self.arguments[0] += " (unreleased)"
return super().run()