Skip to content

Commit 2fffbf5

Browse files
Support Major / Minor / Micro level ABI Compatibility
1 parent 5b994c1 commit 2fffbf5

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

variantlib/resolver/lib.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from typing import TYPE_CHECKING
77

88
from packaging.utils import canonicalize_name
9+
from packaging.version import Version
910

1011
from variantlib.constants import VARIANT_ABI_DEPENDENCY_NAMESPACE
1112
from variantlib.models.variant import VariantDescription
@@ -34,9 +35,11 @@ def _normalize_package_name(name: str) -> str:
3435
return canonicalize_name(name).replace("-", "_")
3536

3637

37-
def _normalize_package_version(version: str) -> str:
38-
# VALIDATION_VALUE_REGEX does not accepts "+"
39-
return version.split("+", maxsplit=1)[0]
38+
def _generate_version_matches(version: str) -> Generator[str]:
39+
vspec = Version(version)
40+
yield f"{vspec.major}"
41+
yield f"{vspec.major}.{vspec.minor}"
42+
yield f"{vspec.major}.{vspec.minor}.{vspec.micro}"
4043

4144

4245
def filter_variants(
@@ -169,25 +172,27 @@ def sort_and_filter_supported_variants(
169172
)
170173
continue
171174

172-
supported_vprops.append(
175+
supported_vprops.extend(
173176
VariantProperty(
174177
namespace=VARIANT_ABI_DEPENDENCY_NAMESPACE,
175178
feature=_normalize_package_name(pkg_name),
176-
value=_normalize_package_version(pkg_version),
179+
value=_ver,
177180
)
181+
for _ver in _generate_version_matches(pkg_version)
178182
)
179183

180184
# 2. Automatically populate from the current python environment
181185
packages = [
182186
(dist.metadata["Name"], dist.version) for dist in metadata.distributions()
183187
]
184188
for pkg_name, pkg_version in sorted(packages):
185-
supported_vprops.append(
189+
supported_vprops.extend(
186190
VariantProperty(
187191
namespace=VARIANT_ABI_DEPENDENCY_NAMESPACE,
188192
feature=_normalize_package_name(pkg_name),
189-
value=_normalize_package_version(pkg_version),
193+
value=_ver,
190194
)
195+
for _ver in _generate_version_matches(pkg_version)
191196
)
192197

193198
# 3. Adding `VARIANT_ABI_DEPENDENCY_NAMESPACE` at the back of`namespace_priorities`

0 commit comments

Comments
 (0)