fix extendee_spec for transitive dependencies on potential extendees (#48025)
* fix extendee_spec for transitive dependencies on potential extendees * regression test * resolve conditional extensions on direct deps * remove outdated comment Co-authored-by: Harmen Stoppels <me@harmenstoppels.nl> --------- Co-authored-by: Harmen Stoppels <me@harmenstoppels.nl>
This commit is contained in:
@@ -462,8 +462,7 @@ def _execute_extends(pkg):
|
||||
if dep_spec.name == "python" and not pkg.name == "python-venv":
|
||||
_depends_on(pkg, spack.spec.Spec("python-venv"), when=when, type=("build", "run"))
|
||||
|
||||
# TODO: the values of the extendees dictionary are not used. Remove in next refactor.
|
||||
pkg.extendees[dep_spec.name] = (dep_spec, None)
|
||||
pkg.extendees[dep_spec.name] = (dep_spec, when_spec)
|
||||
|
||||
return _execute_extends
|
||||
|
||||
|
@@ -1288,12 +1288,13 @@ def extendee_spec(self):
|
||||
if not self.extendees:
|
||||
return None
|
||||
|
||||
deps = []
|
||||
|
||||
# If the extendee is in the spec's deps already, return that.
|
||||
for dep in self.spec.traverse(deptype=("link", "run")):
|
||||
if dep.name in self.extendees:
|
||||
deps.append(dep)
|
||||
deps = [
|
||||
dep
|
||||
for dep in self.spec.dependencies(deptype=("link", "run"))
|
||||
for d, when in self.extendees.values()
|
||||
if dep.satisfies(d) and self.spec.satisfies(when)
|
||||
]
|
||||
|
||||
if deps:
|
||||
assert len(deps) == 1
|
||||
|
@@ -67,6 +67,20 @@ def test_extends_spec(config, mock_packages):
|
||||
assert extender.package.extends(extendee)
|
||||
|
||||
|
||||
@pytest.mark.regression("48024")
|
||||
def test_conditionally_extends_transitive_dep(config, mock_packages):
|
||||
spec = spack.spec.Spec("conditionally-extends-transitive-dep").concretized()
|
||||
|
||||
assert not spec.package.extendee_spec
|
||||
|
||||
|
||||
@pytest.mark.regression("48025")
|
||||
def test_conditionally_extends_direct_dep(config, mock_packages):
|
||||
spec = spack.spec.Spec("conditionally-extends-direct-dep").concretized()
|
||||
|
||||
assert not spec.package.extendee_spec
|
||||
|
||||
|
||||
@pytest.mark.regression("34368")
|
||||
def test_error_on_anonymous_dependency(config, mock_packages):
|
||||
pkg = spack.repo.PATH.get_pkg_class("pkg-a")
|
||||
|
Reference in New Issue
Block a user