Source code for spack.cmd.load

# Copyright 2013-2024 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 sys

import spack.cmd
import spack.cmd.find
import spack.environment as ev
import spack.store
import spack.user_environment as uenv
import spack.util.environment
from spack.cmd.common import arguments

description = "add package to the user environment"
section = "user environment"
level = "short"


[docs] def setup_parser(subparser): """Parser is only constructed so that this prints a nice help message with -h.""" arguments.add_common_arguments(subparser, ["constraint"]) shells = subparser.add_mutually_exclusive_group() shells.add_argument( "--sh", action="store_const", dest="shell", const="sh", help="print sh commands to load the package", ) shells.add_argument( "--csh", action="store_const", dest="shell", const="csh", help="print csh commands to load the package", ) shells.add_argument( "--fish", action="store_const", dest="shell", const="fish", help="print fish commands to load the package", ) shells.add_argument( "--bat", action="store_const", dest="shell", const="bat", help="print bat commands to load the package", ) shells.add_argument( "--pwsh", action="store_const", dest="shell", const="pwsh", help="print pwsh commands to load the package", ) subparser.add_argument( "--first", action="store_true", default=False, dest="load_first", help="load the first match if multiple packages match the spec", ) subparser.add_argument( "--list", action="store_true", default=False, help="show loaded packages: same as `spack find --loaded`", )
[docs] def load(parser, args): env = ev.active_environment() if args.list: results = spack.cmd.filter_loaded_specs(args.specs()) if sys.stdout.isatty(): spack.cmd.print_how_many_pkgs(results, "loaded") spack.cmd.display_specs(results) return constraint_specs = spack.cmd.parse_specs(args.constraint) specs = [ spack.cmd.disambiguate_spec(spec, env, first=args.load_first) for spec in constraint_specs ] if not args.shell: specs_str = " ".join(str(s) for s in constraint_specs) or "SPECS" spack.cmd.common.shell_init_instructions( "spack load", f" eval `spack load {{sh_arg}} {specs_str}`" ) return 1 with spack.store.STORE.db.read_transaction(): env_mod = uenv.environment_modifications_for_specs(*specs) for spec in specs: env_mod.prepend_path(uenv.spack_loaded_hashes_var, spec.dag_hash()) cmds = env_mod.shell_modifications(args.shell) sys.stdout.write(cmds)