summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2015-12-22 08:25:52 -0800
committerTodd Gamblin <tgamblin@llnl.gov>2015-12-22 08:25:52 -0800
commitb1d40efd99a08b9a3fc117a375f6c0d1ef3b32a8 (patch)
tree372b0069f7f624cf5386edc3ecb101c53eb2b298 /lib
parent5bcec9289e1f8e7bc06adf228c08d61c677f3d8a (diff)
parentfe0fdf60b46716fa20318c627ea80ff4e3398263 (diff)
downloadspack-b1d40efd99a08b9a3fc117a375f6c0d1ef3b32a8.tar.gz
spack-b1d40efd99a08b9a3fc117a375f6c0d1ef3b32a8.tar.bz2
spack-b1d40efd99a08b9a3fc117a375f6c0d1ef3b32a8.tar.xz
spack-b1d40efd99a08b9a3fc117a375f6c0d1ef3b32a8.zip
Merge pull request #261 from LLNL/features/prefer-versions-in-packages
Add ability to prefer particular versions in packages.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/concretize.py11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/spack/spack/concretize.py b/lib/spack/spack/concretize.py
index d9419da784..85cdb202d5 100644
--- a/lib/spack/spack/concretize.py
+++ b/lib/spack/spack/concretize.py
@@ -40,7 +40,6 @@ import spack.error
from spack.version import *
-
class DefaultConcretizer(object):
"""This class doesn't have any state, it just provides some methods for
concretization. You can subclass it to override just some of the
@@ -68,9 +67,17 @@ class DefaultConcretizer(object):
# If there are known available versions, return the most recent
# version that satisfies the spec
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(
[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:
spec.versions = ver([valid_versions[-1]])