diff options
author | Massimiliano Culpo <massimiliano.culpo@gmail.com> | 2020-02-10 20:22:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-10 11:22:21 -0800 |
commit | 357786ce6b48749499538978b19f75b4ba92487c (patch) | |
tree | 270acd0b2f732aad53b6573a6cb2639893b9f039 /lib | |
parent | 4e32505770f2ab54717f77e51bdc79ee12faba96 (diff) | |
download | spack-357786ce6b48749499538978b19f75b4ba92487c.tar.gz spack-357786ce6b48749499538978b19f75b4ba92487c.tar.bz2 spack-357786ce6b48749499538978b19f75b4ba92487c.tar.xz spack-357786ce6b48749499538978b19f75b4ba92487c.zip |
Spack find: fix queries that specify dependencies (#14757)
Fixes #10019
If multiple instances of a package were installed in a single
instance of Spack, and they differed in terms of dependencies, then
"spack find" would not distinguish specs based on their dependencies.
For example if two instances of X were installed, one with Y and one
with Z, then "spack find X ^Y" would display both instances of X.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spack/spack/database.py | 3 | ||||
-rw-r--r-- | lib/spack/spack/test/database.py | 20 |
2 files changed, 22 insertions, 1 deletions
diff --git a/lib/spack/spack/database.py b/lib/spack/spack/database.py index c06d1ae546..65b85e026b 100644 --- a/lib/spack/spack/database.py +++ b/lib/spack/spack/database.py @@ -1254,7 +1254,8 @@ class Database(object): if not (start_date < inst_date < end_date): continue - if query_spec is any or rec.spec.satisfies(query_spec): + if (query_spec is any or + rec.spec.satisfies(query_spec, strict=True)): results.append(rec.spec) return results diff --git a/lib/spack/spack/test/database.py b/lib/spack/spack/test/database.py index a2b9677ec6..1af125a723 100644 --- a/lib/spack/spack/test/database.py +++ b/lib/spack/spack/test/database.py @@ -729,3 +729,23 @@ def test_query_unused_specs(mutable_database): unused = spack.store.db.unused_specs assert len(unused) == 1 assert unused[0].name == 'cmake' + + +@pytest.mark.regression('10019') +def test_query_spec_with_conditional_dependency(mutable_database): + # The issue is triggered by having dependencies that are + # conditional on a Boolean variant + s = spack.spec.Spec('hdf5~mpi') + s.concretize() + s.package.do_install(fake=True, explicit=True) + + results = spack.store.db.query_local('hdf5 ^mpich') + assert not results + + +@pytest.mark.regression('10019') +def test_query_spec_with_non_conditional_virtual_dependency(database): + # Ensure the same issue doesn't come up for virtual + # dependency that are not conditional on variants + results = spack.store.db.query_local('mpileaks ^mpich') + assert len(results) == 1 |