diff options
author | Omri Mor <omrimor2@illinois.edu> | 2020-10-17 02:40:31 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-17 11:40:31 +0200 |
commit | bff0291dac7ddead31ffc535624598f53b7ca0f3 (patch) | |
tree | dd513be757236f80f0e6901e5841a6b68133bacf /lib | |
parent | 1a6c5ff5410746c27baa3cf893c08583eb54de78 (diff) | |
download | spack-bff0291dac7ddead31ffc535624598f53b7ca0f3.tar.gz spack-bff0291dac7ddead31ffc535624598f53b7ca0f3.tar.bz2 spack-bff0291dac7ddead31ffc535624598f53b7ca0f3.tar.xz spack-bff0291dac7ddead31ffc535624598f53b7ca0f3.zip |
Spec: fix multiple generator iteration in satisfies_dependencies (#18527) (#18559)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spack/spack/spec.py | 5 | ||||
-rw-r--r-- | lib/spack/spack/test/spec_semantics.py | 7 |
2 files changed, 10 insertions, 2 deletions
diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index 47ff0c5d06..b6f961e09f 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -3009,8 +3009,9 @@ class Spec(object): if not self._dependencies: return False - selfdeps = self.traverse(root=False) - otherdeps = other.traverse(root=False) + # use list to prevent double-iteration + selfdeps = list(self.traverse(root=False)) + otherdeps = list(other.traverse(root=False)) if not all(any(d.satisfies(dep, strict=True) for d in selfdeps) for dep in otherdeps): return False diff --git a/lib/spack/spack/test/spec_semantics.py b/lib/spack/spack/test/spec_semantics.py index a258e45826..50a1731dfe 100644 --- a/lib/spack/spack/test/spec_semantics.py +++ b/lib/spack/spack/test/spec_semantics.py @@ -1014,6 +1014,13 @@ class TestSpecSematics(object): with pytest.raises(UnknownVariantError, match=r'package has no such'): s.concretize() + @pytest.mark.regression('18527') + def test_satisfies_dependencies_ordered(self): + d = Spec('zmpi ^fake') + s = Spec('mpileaks') + s._add_dependency(d, ()) + assert s.satisfies('mpileaks ^zmpi ^fake', strict=True) + @pytest.mark.regression('3887') @pytest.mark.parametrize('spec_str', [ |