summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2020-02-10 20:22:21 +0100
committerGitHub <noreply@github.com>2020-02-10 11:22:21 -0800
commit357786ce6b48749499538978b19f75b4ba92487c (patch)
tree270acd0b2f732aad53b6573a6cb2639893b9f039 /lib
parent4e32505770f2ab54717f77e51bdc79ee12faba96 (diff)
downloadspack-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.py3
-rw-r--r--lib/spack/spack/test/database.py20
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