|
9 | 9 | files between releases. |
10 | 10 | """ |
11 | 11 |
|
12 | | -import json |
13 | 12 | import logging |
14 | | -import re |
15 | 13 | from pathlib import Path |
16 | 14 |
|
17 | 15 | from sphinx.application import Sphinx |
18 | 16 | from sphinx.util.typing import ExtensionMetadata |
| 17 | +from versions import Versions, get_versions |
19 | 18 |
|
20 | 19 | from .kconfig_utils import RESOURCES_DIR |
21 | 20 | from .legend import KconfigDiffLegendDirective |
|
27 | 26 |
|
28 | 27 | __version__ = "0.1.0" |
29 | 28 |
|
30 | | -VERSION_REGEX = re.compile(r"^\d+\.\d+\.\d+$") |
31 | | -MAJOR_VERSION_REGEX = re.compile(r"^\d+\.\d+\.0$") |
32 | 29 |
|
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: |
43 | 31 | current = "latest" |
44 | 32 |
|
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 |
57 | 37 |
|
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 |
67 | 48 |
|
68 | | - if prev := get_major_version(versions): |
69 | | - return current, prev |
| 49 | + if prev := minor_versions.latest(): |
| 50 | + return current, prev |
70 | 51 |
|
71 | | - logger.error("Not enough versions to generate comparison") |
72 | | - return None |
| 52 | + logger.error("Not enough versions to generate comparison") |
| 53 | + return None |
73 | 54 |
|
74 | 55 |
|
75 | 56 | def kconfigdiff_install(app: Sphinx) -> None: |
76 | 57 | app.config.html_static_path.append(RESOURCES_DIR.as_posix()) |
77 | 58 |
|
78 | | - versions = get_versions(app) |
| 59 | + versions = get_kconfig_versions(app) |
79 | 60 | app.config.kconfigdiff_versions = versions |
80 | 61 |
|
81 | 62 | if versions: |
|
0 commit comments