Merge pull request #261 from LLNL/features/prefer-versions-in-packages

Add ability to prefer particular versions in packages.
This commit is contained in:
Todd Gamblin
2015-12-22 08:25:52 -08:00
2 changed files with 10 additions and 3 deletions

View File

@@ -40,7 +40,6 @@
from spack.version import * from spack.version import *
class DefaultConcretizer(object): class DefaultConcretizer(object):
"""This class doesn't have any state, it just provides some methods for """This class doesn't have any state, it just provides some methods for
concretization. You can subclass it to override just some of the concretization. You can subclass it to override just some of the
@@ -68,9 +67,17 @@ def concretize_version(self, spec):
# If there are known available versions, return the most recent # If there are known available versions, return the most recent
# version that satisfies the spec # version that satisfies the spec
pkg = spec.package pkg = spec.package
# Key function to sort versions first by whether they were
# marked `preferred=True`, then by most recent.
def preferred_key(v):
prefer = pkg.versions[v].get('preferred', False)
return (prefer, v)
valid_versions = sorted( valid_versions = sorted(
[v for v in pkg.versions [v for v in pkg.versions
if any(v.satisfies(sv) for sv in spec.versions)]) if any(v.satisfies(sv) for sv in spec.versions)],
key=preferred_key)
if valid_versions: if valid_versions:
spec.versions = ver([valid_versions[-1]]) spec.versions = ver([valid_versions[-1]])

View File

@@ -17,7 +17,7 @@ class Python(Package):
version('2.7.8', 'd235bdfa75b8396942e360a70487ee00') version('2.7.8', 'd235bdfa75b8396942e360a70487ee00')
version('2.7.10', 'c685ef0b8e9f27b5e3db5db12b268ac6') version('2.7.10', 'c685ef0b8e9f27b5e3db5db12b268ac6')
version('2.7.11', '1dbcc848b4cd8399a8199d000f9f823c') version('2.7.11', '1dbcc848b4cd8399a8199d000f9f823c', preferred=True)
version('3.5.0', 'd149d2812f10cbe04c042232e7964171') version('3.5.0', 'd149d2812f10cbe04c042232e7964171')
version('3.5.1', 'e9ea6f2623fffcdd871b7b19113fde80') version('3.5.1', 'e9ea6f2623fffcdd871b7b19113fde80')