Skip to content

Commit 4b89f47

Browse files
andu-nordiccarlescufi
authored andcommitted
doc: extensions: adapt kconfigdiff extension to use versoins api
Reuse common versions api. Signed-off-by: Antoni Duda <antoni.duda@nordicsemi.no>
1 parent 8fe3d5c commit 4b89f47

1 file changed

Lines changed: 21 additions & 40 deletions

File tree

doc/_extensions/kconfigdiff/__init__.py

Lines changed: 21 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@
99
files between releases.
1010
"""
1111

12-
import json
1312
import logging
14-
import re
1513
from pathlib import Path
1614

1715
from sphinx.application import Sphinx
1816
from sphinx.util.typing import ExtensionMetadata
17+
from versions import Versions, get_versions
1918

2019
from .kconfig_utils import RESOURCES_DIR
2120
from .legend import KconfigDiffLegendDirective
@@ -27,55 +26,37 @@
2726

2827
__version__ = "0.1.0"
2928

30-
VERSION_REGEX = re.compile(r"^\d+\.\d+\.\d+$")
31-
MAJOR_VERSION_REGEX = re.compile(r"^\d+\.\d+\.0$")
3229

33-
34-
def is_major(version: str):
35-
return MAJOR_VERSION_REGEX.match(version)
36-
37-
38-
def get_major_version(versions: list[str]) -> str | None:
39-
return next((v for v in versions if is_major(v)), None)
40-
41-
42-
def get_versions(app) -> tuple[str, str] | None:
30+
def get_kconfig_versions(app: Sphinx) -> tuple[str, str] | None:
4331
current = "latest"
4432

45-
with open(VERSIONS_FILE, "rb") as f:
46-
versions = json.load(f)
47-
if not versions:
48-
logger.error("Ill formatted versions file")
49-
return None
50-
51-
if versions[0].endswith("99"):
52-
# skip the placeholder .99 version
53-
versions.pop(0)
54-
55-
# Filter out preview versions (and other -addition versions)
56-
versions = [v for v in versions if VERSION_REGEX.match(v)]
33+
versions = get_versions(app).normalized().patchlevel()
34+
if not versions:
35+
logger.error("Ill formatted versions file")
36+
return None
5737

58-
if app.config.kconfigdiff_is_release:
59-
current = versions[0]
60-
if is_major(current) and (prev := get_major_version(versions[1:])):
61-
return current, prev
62-
elif len(versions) >= 2:
63-
return current, versions[1]
64-
else:
65-
logger.error("Not enough versions to generate comparison")
66-
return None
38+
minor_versions = versions.minor()
39+
if app.config.kconfigdiff_is_release:
40+
current = versions.latest()
41+
if len(minor_versions) >= 2 and Versions.is_minor(current):
42+
return current, minor_versions.all()[1]
43+
elif len(versions) >= 2:
44+
return current, versions.all()[1]
45+
else:
46+
logger.error("Not enough versions to generate comparison")
47+
return None
6748

68-
if prev := get_major_version(versions):
69-
return current, prev
49+
if prev := minor_versions.latest():
50+
return current, prev
7051

71-
logger.error("Not enough versions to generate comparison")
72-
return None
52+
logger.error("Not enough versions to generate comparison")
53+
return None
7354

7455

7556
def kconfigdiff_install(app: Sphinx) -> None:
7657
app.config.html_static_path.append(RESOURCES_DIR.as_posix())
7758

78-
versions = get_versions(app)
59+
versions = get_kconfig_versions(app)
7960
app.config.kconfigdiff_versions = versions
8061

8162
if versions:

0 commit comments

Comments
 (0)