bugfix for dot graphs of virtual packages.

This commit is contained in:
Todd Gamblin 2015-01-03 17:58:37 -08:00
parent 0a0291678e
commit b4b8339d0d
2 changed files with 17 additions and 11 deletions

View File

@ -39,7 +39,7 @@ def setup_parser(subparser):
'--dot', action='store_true',
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.")
subparser.add_argument(

View File

@ -46,6 +46,7 @@
from llnl.util.tty.color import *
import spack
from spack.spec import Spec
def topological_sort(spec, **kwargs):
@ -455,23 +456,28 @@ def quote(string):
return '"%s"' % string
if not specs:
packages = spack.db.all_packages()
specs = [p.name for p in spack.db.all_packages()]
else:
packages = []
for spec in specs:
packages.extend(s.package for s in spec.normalized().traverse())
roots = specs
specs = set()
for spec in roots:
specs.update(Spec(s.name) for s in spec.normalized().traverse())
deps = []
for pkg in packages:
out.write(' %-30s [label="%s"]\n' % (quote(pkg.name), pkg.name))
for spec in specs:
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.
for dep_name, dep in pkg.dependencies.iteritems():
deps.append((pkg.name, dep_name))
for dep_name, dep in spec.package.dependencies.iteritems():
deps.append((spec.name, dep_name))
# If the package provides something, add an edge for that.
for provider in set(p.name for p in pkg.provided):
deps.append((provider, pkg.name))
for provider in set(s.name for s in spec.package.provided):
deps.append((provider, spec.name))
out.write('\n')