diff options
Diffstat (limited to 'lib/spack/spack/spec.py')
-rw-r--r-- | lib/spack/spack/spec.py | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index cbcb2199f6..f830b73fa0 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -2396,12 +2396,24 @@ class Spec(object): def __str__(self): return self.format() + self.dep_string() + def _install_status(self): + """Helper for tree to print DB install status.""" + if not self.concrete: + return None + try: + record = spack.store.db.get_record(self) + return record.installed + except KeyError: + return None + def tree(self, **kwargs): """Prints out this spec and its dependencies, tree-formatted with indentation.""" color = kwargs.pop('color', False) depth = kwargs.pop('depth', False) - showid = kwargs.pop('ids', False) + hashes = kwargs.pop('hashes', True) + hlen = kwargs.pop('hashlen', None) + install_status = kwargs.pop('install_status', True) cover = kwargs.pop('cover', 'nodes') indent = kwargs.pop('indent', 0) fmt = kwargs.pop('format', '$_$@$%@+$+$=') @@ -2410,8 +2422,6 @@ class Spec(object): check_kwargs(kwargs, self.tree) out = "" - cur_id = 0 - ids = {} for d, node in self.traverse( order='pre', cover=cover, depth=True, deptypes=deptypes): if prefix is not None: @@ -2419,11 +2429,17 @@ class Spec(object): out += " " * indent if depth: out += "%-4d" % d - if not id(node) in ids: - cur_id += 1 - ids[id(node)] = cur_id - if showid: - out += "%-4d" % ids[id(node)] + if install_status: + status = node._install_status() + if status is None: + out += " " # Package isn't installed + elif status: + out += colorize("@g{[+]} ", color=color) # installed + else: + out += colorize("@r{[-]} ", color=color) # missing + + if hashes: + out += colorize('@K{%s} ', color=color) % node.dag_hash(hlen) out += (" " * d) if d > 0: out += "^" |