diff --git a/lib/spack/spack/cmd/spec.py b/lib/spack/spack/cmd/spec.py index 0abd63ff6a69b6d77aab367dd192cc33b43a6484..e1c2bd3f2661c012d79d927a7c4215ee9ce1efec 100644 --- a/lib/spack/spack/cmd/spec.py +++ b/lib/spack/spack/cmd/spec.py @@ -70,6 +70,12 @@ def setup_parser(subparser): subparser.add_argument( "-t", "--types", action="store_true", default=False, help="show dependency types" ) + subparser.add_argument( + "--test", + default=None, + choices=["root", "all"], + help="concretize with test dependencies of only root packages or all packages", + ) arguments.add_common_arguments(subparser, ["specs"]) arguments.add_concretizer_args(subparser) @@ -98,9 +104,17 @@ def spec(parser, args): # Use command line specified specs, otherwise try to use environment specs. if args.specs: input_specs = spack.cmd.parse_specs(args.specs) - concretized_specs = spack.cmd.parse_specs(args.specs, concretize=True) + if args.test == "all": + tests = True + elif args.test == "root": + tests = [spec.name for spec in input_specs] + else: + tests = False + concretized_specs = spack.cmd.parse_specs(args.specs, concretize=True, tests=tests) specs = list(zip(input_specs, concretized_specs)) else: + if args.test is not None: + tty.die("spack spec for environments does not support test dependency selection") env = ev.active_environment() if env: env.concretize() @@ -108,11 +122,16 @@ def spec(parser, args): else: tty.die("spack spec requires at least one spec or an active environment") + first_doc = True for input, output in specs: # With -y, just print YAML to output. if args.format: if args.format == "yaml": # use write because to_yaml already has a newline. + if first_doc: + first_doc = False + else: + sys.stdout.write("---\n") sys.stdout.write(output.to_yaml(hash=ht.dag_hash)) elif args.format == "json": print(output.to_json(hash=ht.dag_hash))