bugfix for dot graphs of virtual packages.
This commit is contained in:
parent
0a0291678e
commit
b4b8339d0d
@ -39,7 +39,7 @@ def setup_parser(subparser):
|
|||||||
'--dot', action='store_true',
|
'--dot', action='store_true',
|
||||||
help="Generate graph in dot format and print to stdout.")
|
help="Generate graph in dot format and print to stdout.")
|
||||||
|
|
||||||
method.add_argument(
|
subparser.add_argument(
|
||||||
'--concretize', action='store_true', help="Concretize specs before graphing.")
|
'--concretize', action='store_true', help="Concretize specs before graphing.")
|
||||||
|
|
||||||
subparser.add_argument(
|
subparser.add_argument(
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
from llnl.util.tty.color import *
|
from llnl.util.tty.color import *
|
||||||
|
|
||||||
import spack
|
import spack
|
||||||
|
from spack.spec import Spec
|
||||||
|
|
||||||
|
|
||||||
def topological_sort(spec, **kwargs):
|
def topological_sort(spec, **kwargs):
|
||||||
@ -455,23 +456,28 @@ def quote(string):
|
|||||||
return '"%s"' % string
|
return '"%s"' % string
|
||||||
|
|
||||||
if not specs:
|
if not specs:
|
||||||
packages = spack.db.all_packages()
|
specs = [p.name for p in spack.db.all_packages()]
|
||||||
else:
|
else:
|
||||||
packages = []
|
roots = specs
|
||||||
for spec in specs:
|
specs = set()
|
||||||
packages.extend(s.package for s in spec.normalized().traverse())
|
for spec in roots:
|
||||||
|
specs.update(Spec(s.name) for s in spec.normalized().traverse())
|
||||||
|
|
||||||
deps = []
|
deps = []
|
||||||
for pkg in packages:
|
for spec in specs:
|
||||||
out.write(' %-30s [label="%s"]\n' % (quote(pkg.name), pkg.name))
|
out.write(' %-30s [label="%s"]\n' % (quote(spec.name), spec.name))
|
||||||
|
|
||||||
|
# Skip virtual specs (we'll find out about them from concrete ones.
|
||||||
|
if spec.virtual:
|
||||||
|
continue
|
||||||
|
|
||||||
# Add edges for each depends_on in the package.
|
# Add edges for each depends_on in the package.
|
||||||
for dep_name, dep in pkg.dependencies.iteritems():
|
for dep_name, dep in spec.package.dependencies.iteritems():
|
||||||
deps.append((pkg.name, dep_name))
|
deps.append((spec.name, dep_name))
|
||||||
|
|
||||||
# If the package provides something, add an edge for that.
|
# If the package provides something, add an edge for that.
|
||||||
for provider in set(p.name for p in pkg.provided):
|
for provider in set(s.name for s in spec.package.provided):
|
||||||
deps.append((provider, pkg.name))
|
deps.append((provider, spec.name))
|
||||||
|
|
||||||
out.write('\n')
|
out.write('\n')
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user