diff options
author | Harmen Stoppels <harmenstoppels@gmail.com> | 2021-03-09 01:47:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-08 16:47:00 -0800 |
commit | 1659beb220bde672ff50a47af934e8ba3b7323e5 (patch) | |
tree | 8e6d2e5e981a254d2ca822c0879d180187767a0c /lib | |
parent | ccc7ed0af9c9f7f0a5c503f97ce41bfaa0ca1631 (diff) | |
download | spack-1659beb220bde672ff50a47af934e8ba3b7323e5.tar.gz spack-1659beb220bde672ff50a47af934e8ba3b7323e5.tar.bz2 spack-1659beb220bde672ff50a47af934e8ba3b7323e5.tar.xz spack-1659beb220bde672ff50a47af934e8ba3b7323e5.zip |
Fix `spack graph` when deptypes are filtered (#22121)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spack/spack/graph.py | 13 | ||||
-rw-r--r-- | lib/spack/spack/test/directory_layout.py | 2 | ||||
-rw-r--r-- | lib/spack/spack/test/graph.py | 9 |
3 files changed, 16 insertions, 8 deletions
diff --git a/lib/spack/spack/graph.py b/lib/spack/spack/graph.py index 2ddc10ac7a..87ad51e030 100644 --- a/lib/spack/spack/graph.py +++ b/lib/spack/spack/graph.py @@ -62,17 +62,16 @@ def topological_sort(spec, reverse=False, deptype='all'): """ deptype = canonical_deptype(deptype) - if not reverse: - parents = lambda s: s.dependents() - children = lambda s: s.dependencies() - else: - parents = lambda s: s.dependencies() - children = lambda s: s.dependents() - # Work on a copy so this is nondestructive. spec = spec.copy(deps=deptype) nodes = spec.index(deptype=deptype) + parents = lambda s: [p for p in s.dependents() if p.name in nodes] + children = lambda s: s.dependencies() + + if reverse: + parents, children = children, parents + topo_order = [] par = dict((name, parents(nodes[name])) for name in nodes.keys()) remaining = [name for name in nodes.keys() if not parents(nodes[name])] diff --git a/lib/spack/spack/test/directory_layout.py b/lib/spack/spack/test/directory_layout.py index 04e42549d6..73446714ba 100644 --- a/lib/spack/spack/test/directory_layout.py +++ b/lib/spack/spack/test/directory_layout.py @@ -120,7 +120,7 @@ def test_read_and_write_spec(temporary_store, config, mock_packages): # TODO: fix this when we can concretize more loosely based on # TODO: what is installed. We currently omit these to # TODO: increase reuse of build dependencies. - stored_deptypes = ('link', 'run') + stored_deptypes = spack.hash_types.full_hash expected = spec.copy(deps=stored_deptypes) expected._mark_concrete() diff --git a/lib/spack/spack/test/graph.py b/lib/spack/spack/test/graph.py index 9242cd2717..76c9524728 100644 --- a/lib/spack/spack/test/graph.py +++ b/lib/spack/spack/test/graph.py @@ -122,3 +122,12 @@ o dyninst |/ o libelf ''' + + +def test_topo_sort_filtered(mock_packages): + """Test topo sort gives correct order when filtering link deps.""" + s = Spec('both-link-and-build-dep-a').normalized() + + topo = topological_sort(s, deptype=('link',)) + + assert topo == ['both-link-and-build-dep-a', 'both-link-and-build-dep-c'] |