summaryrefslogtreecommitdiff
path: root/lib/spack/spack/cmd/concretize.py
blob: 47cccef9ba2bbf66ee6c4dce8cc2bade3243dc95 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

import spack.cmd
import spack.cmd.common.arguments
import spack.environment as ev

description = "concretize an environment and write a lockfile"
section = "environments"
level = "long"


def setup_parser(subparser):
    subparser.add_argument(
        "-f", "--force", action="store_true", help="re-concretize even if already concretized"
    )
    subparser.add_argument(
        "--test",
        default=None,
        choices=["root", "all"],
        help="concretize with test dependencies of only root packages or all packages",
    )
    subparser.add_argument(
        "-q", "--quiet", action="store_true", help="don't print concretized specs"
    )

    spack.cmd.common.arguments.add_concretizer_args(subparser)
    spack.cmd.common.arguments.add_common_arguments(subparser, ["jobs"])


def concretize(parser, args):
    env = spack.cmd.require_active_env(cmd_name="concretize")

    if args.test == "all":
        tests = True
    elif args.test == "root":
        tests = [spec.name for spec in env.user_specs]
    else:
        tests = False

    with env.write_transaction():
        concretized_specs = env.concretize(force=args.force, tests=tests)
        if not args.quiet:
            ev.display_specs(concretized_specs)
        env.write()