package_base: sort deprecated versions later in preferred_version (#46025)

This commit is contained in:
Wouter Deconinck 2024-09-02 05:42:15 -05:00 committed by GitHub
parent aaa7469b92
commit c47a3ee05b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 8 deletions

View File

@ -116,11 +116,10 @@ def preferred_version(pkg: "PackageBase"):
Arguments: Arguments:
pkg: The package whose versions are to be assessed. pkg: The package whose versions are to be assessed.
""" """
# Here we sort first on the fact that a version is marked from spack.solver.asp import concretization_version_order
# as preferred in the package, then on the fact that the
# version is not develop, then lexicographically version, _ = max(pkg.versions.items(), key=concretization_version_order)
key_fn = lambda v: (pkg.versions[v].get("preferred", False), not v.isdevelop(), v) return version
return max(pkg.versions, key=key_fn)
class WindowsRPath: class WindowsRPath:

View File

@ -579,7 +579,7 @@ def _is_checksummed_version(version_info: Tuple[GitOrStandardVersion, dict]):
return _is_checksummed_git_version(version) return _is_checksummed_git_version(version)
def _concretization_version_order(version_info: Tuple[GitOrStandardVersion, dict]): def concretization_version_order(version_info: Tuple[GitOrStandardVersion, dict]):
"""Version order key for concretization, where preferred > not preferred, """Version order key for concretization, where preferred > not preferred,
not deprecated > deprecated, finite > any infinite component; only if all are not deprecated > deprecated, finite > any infinite component; only if all are
the same, do we use default version ordering.""" the same, do we use default version ordering."""
@ -2026,7 +2026,7 @@ def define_package_versions_and_validate_preferences(
# like being a "develop" version or being preferred exist only at a # like being a "develop" version or being preferred exist only at a
# package.py level, sort them in this partial list here # package.py level, sort them in this partial list here
package_py_versions = sorted( package_py_versions = sorted(
pkg_cls.versions.items(), key=_concretization_version_order, reverse=True pkg_cls.versions.items(), key=concretization_version_order, reverse=True
) )
if require_checksum and pkg_cls.has_code: if require_checksum and pkg_cls.has_code:

View File

@ -2962,7 +2962,7 @@ def test_concretization_version_order():
result = [ result = [
v v
for v, _ in sorted( for v, _ in sorted(
versions, key=spack.solver.asp._concretization_version_order, reverse=True versions, key=spack.solver.asp.concretization_version_order, reverse=True
) )
] ]
assert result == [ assert result == [