summaryrefslogblamecommitdiff
path: root/lib/spack/spack/cmd/concretize.py
blob: 47cccef9ba2bbf66ee6c4dce8cc2bade3243dc95 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                         



                                                                         
                
                                 

                              
                                                              
                        




                            
                                                                                              
     
                           


                                
                                                                                       
     
                           
                                                                                  
     
 
                                                              
                                                                        
 

                             
                                                             
 
                          
                    
                             



                                                      
                                 
                                                                         

                                               
                   
# 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()