Use bfs in get_spec_filter_list (#36093)

This commit is contained in:
Harmen Stoppels 2023-03-14 14:34:56 +01:00 committed by GitHub
parent 5c48304d07
commit 40019dacd9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -38,6 +38,7 @@
import spack.util.spack_yaml as syaml import spack.util.spack_yaml as syaml
import spack.util.url as url_util import spack.util.url as url_util
import spack.util.web as web_util import spack.util.web as web_util
from spack import traverse
from spack.error import SpackError from spack.error import SpackError
from spack.reporters import CDash, CDashConfiguration from spack.reporters import CDash, CDashConfiguration
from spack.reporters.cdash import build_stamp as cdash_build_stamp from spack.reporters.cdash import build_stamp as cdash_build_stamp
@ -471,15 +472,16 @@ def get_spec_filter_list(env, affected_pkgs, dependent_traverse_depth=None):
tty.debug("All concrete environment specs:") tty.debug("All concrete environment specs:")
for s in all_concrete_specs: for s in all_concrete_specs:
tty.debug(" {0}/{1}".format(s.name, s.dag_hash()[:7])) tty.debug(" {0}/{1}".format(s.name, s.dag_hash()[:7]))
env_matches = [s for s in all_concrete_specs if s.name in frozenset(affected_pkgs)] affected_pkgs = frozenset(affected_pkgs)
env_matches = [s for s in all_concrete_specs if s.name in affected_pkgs]
visited = set() visited = set()
dag_hash = lambda s: s.dag_hash() dag_hash = lambda s: s.dag_hash()
for match in env_matches: for depth, parent in traverse.traverse_nodes(
for dep_level, parent in match.traverse(direction="parents", key=dag_hash, depth=True): env_matches, direction="parents", key=dag_hash, depth=True, order="breadth"
if dependent_traverse_depth is None or dep_level <= dependent_traverse_depth: ):
affected_specs.update( if dependent_traverse_depth is not None and depth > dependent_traverse_depth:
parent.traverse(direction="children", visited=visited, key=dag_hash) break
) affected_specs.update(parent.traverse(direction="children", visited=visited, key=dag_hash))
return affected_specs return affected_specs