env: make install_status output more concise

This commit is contained in:
Todd Gamblin 2018-10-22 10:49:43 -07:00
parent a1818f971f
commit 66aa3426ac
3 changed files with 44 additions and 12 deletions

View File

@ -434,7 +434,7 @@ def env_status_setup_parser(subparser):
'env', nargs='?', help='name of environment to show status for') 'env', nargs='?', help='name of environment to show status for')
arguments.add_common_arguments( arguments.add_common_arguments(
subparser, subparser,
['recurse_dependencies', 'long', 'very_long', 'install_status']) ['recurse_dependencies', 'long', 'very_long'])
def env_status(args): def env_status(args):
@ -443,14 +443,12 @@ def env_status(args):
tty.msg('No active environment') tty.msg('No active environment')
return return
tty.msg('In environment %s' % env.path)
# TODO: option to show packages w/ multiple instances? # TODO: option to show packages w/ multiple instances?
env.status( env.status(
sys.stdout, recurse_dependencies=args.recurse_dependencies, sys.stdout, recurse_dependencies=args.recurse_dependencies,
hashes=args.long or args.very_long, hashes=args.long or args.very_long,
hashlen=None if args.very_long else 7, hashlen=None if args.very_long else 7,
install_status=args.install_status) install_status=True)
# #

View File

@ -7,13 +7,13 @@
import re import re
import sys import sys
import shutil import shutil
from six.moves import zip_longest
import jsonschema import jsonschema
import ruamel.yaml import ruamel.yaml
import llnl.util.filesystem as fs import llnl.util.filesystem as fs
import llnl.util.tty as tty import llnl.util.tty as tty
import llnl.util.tty.color as color
import spack.error import spack.error
import spack.repo import spack.repo
@ -589,14 +589,48 @@ def uninstall(self, args):
def status(self, stream, **kwargs): def status(self, stream, **kwargs):
"""List the specs in an environment.""" """List the specs in an environment."""
for user_spec, concretized_hash in zip_longest( if self.path.startswith(env_path):
self.user_specs, self.concretized_order): name = os.path.basename(self.path)
else:
name = self.path
stream.write('========= {0}\n'.format(user_spec)) tty.msg('In environment %s' % name)
if concretized_hash: concretized = [(spec, self.specs_by_hash[h])
concretized_spec = self.specs_by_hash[concretized_hash] for spec, h in zip(self.concretized_user_specs,
stream.write(concretized_spec.tree(**kwargs)) self.concretized_order)]
added = [s for s in self.user_specs
if s not in self.concretized_user_specs]
removed = [(s, c) for s, c in concretized if s not in self.user_specs]
current = [(s, c) for s, c in concretized if s in self.user_specs]
def write_kind(s):
color.cwrite('@c{%s}\n' % str(s), stream)
def write_user_spec(s, c):
color.cwrite('@%s{----} %s\n' % (c, str(s)), stream)
if added:
write_kind('added:')
for s in added:
write_user_spec(s, 'g')
if current:
if added:
stream.write('\n')
write_kind('concrete:')
for s, c in current:
write_user_spec(s, 'K')
stream.write(c.tree(**kwargs))
if removed:
if added or current:
stream.write('\n')
write_kind('removed:')
for s, c in removed:
write_user_spec(s, 'r')
stream.write(c.tree(**kwargs))
def upgrade_dependency(self, dep_name, dry_run=False): def upgrade_dependency(self, dep_name, dry_run=False):
# TODO: if you have # TODO: if you have

View File

@ -3245,7 +3245,7 @@ def tree(self, **kwargs):
if install_status: if install_status:
status = node._install_status() status = node._install_status()
if status is None: if status is None:
out += " " # Package isn't installed out += colorize("@K{ - } ", color=color) # not installed
elif status: elif status:
out += colorize("@g{[+]} ", color=color) # installed out += colorize("@g{[+]} ", color=color) # installed
else: else: