From 7ee73ed1b6a5f216b2aa3d94758110b0e935fd49 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Tue, 12 Nov 2024 09:20:15 +0100 Subject: [PATCH] Spec.__contains__: traverse only lin/run + direct build --- lib/spack/spack/modules/lmod.py | 2 +- lib/spack/spack/spec.py | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/lib/spack/spack/modules/lmod.py b/lib/spack/spack/modules/lmod.py index f028b72cf01..b7d89c64bae 100644 --- a/lib/spack/spack/modules/lmod.py +++ b/lib/spack/spack/modules/lmod.py @@ -225,7 +225,7 @@ def provides(self): # All the other tokens in the hierarchy must be virtual dependencies for x in self.hierarchy_tokens: if self.spec.package.provides(x): - provides[x] = self.spec[x] + provides[x] = self.spec return provides @property diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index 47eb9c5d75a..5f1a4b8434a 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -3677,16 +3677,10 @@ def __getitem__(self, name: str): self.edges_to_dependencies(depflag=dt.BUILD | dt.TEST), ) - # Consider runtime dependencies and direct build/test deps before transitive dependencies, - # and prefer matches closest to the root. + # Consider runtime dependencies and direct build/test deps only try: child: Spec = next( - e.spec - for e in itertools.chain( - (e for e in order() if e.spec.name == name or name in e.virtuals), - # for historical reasons - (e for e in order() if e.spec.concrete and e.spec.package.provides(name)), - ) + e.spec for e in order() if e.spec.name == name or name in e.virtuals ) except StopIteration: raise KeyError(f"No spec with name {name} in {self}")