summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHarmen Stoppels <harmenstoppels@gmail.com>2023-05-19 18:44:54 +0200
committerGitHub <noreply@github.com>2023-05-19 18:44:54 +0200
commitbf45a2b6d3bafc2c87d0741abf13151ac63973e7 (patch)
tree4186fd927d6a44e355cce546b8125a21f2296c1c /lib
parent475ce955e72470ec60f7a85684518a1a3b393fb3 (diff)
downloadspack-bf45a2b6d3bafc2c87d0741abf13151ac63973e7.tar.gz
spack-bf45a2b6d3bafc2c87d0741abf13151ac63973e7.tar.bz2
spack-bf45a2b6d3bafc2c87d0741abf13151ac63973e7.tar.xz
spack-bf45a2b6d3bafc2c87d0741abf13151ac63973e7.zip
spack env create: generate a view when newly created env has concrete specs (#37799)
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/cmd/env.py5
-rw-r--r--lib/spack/spack/test/cmd/env.py19
2 files changed, 23 insertions, 1 deletions
diff --git a/lib/spack/spack/cmd/env.py b/lib/spack/spack/cmd/env.py
index 3e122087f6..6774b15afd 100644
--- a/lib/spack/spack/cmd/env.py
+++ b/lib/spack/spack/cmd/env.py
@@ -302,7 +302,7 @@ def env_create(args):
# the environment should not include a view.
with_view = None
- _env_create(
+ env = _env_create(
args.create_env,
init_file=args.envfile,
dir=args.dir,
@@ -310,6 +310,9 @@ def env_create(args):
keep_relative=args.keep_relative,
)
+ # Generate views, only really useful for environments created from spack.lock files.
+ env.regenerate_views()
+
def _env_create(name_or_path, *, init_file=None, dir=False, with_view=None, keep_relative=False):
"""Create a new environment, with an optional yaml description.
diff --git a/lib/spack/spack/test/cmd/env.py b/lib/spack/spack/test/cmd/env.py
index f26e5f7f3d..5855e0e208 100644
--- a/lib/spack/spack/test/cmd/env.py
+++ b/lib/spack/spack/test/cmd/env.py
@@ -3299,3 +3299,22 @@ def test_environment_created_in_users_location(mutable_config, tmpdir):
assert dir_name in out
assert env_dir in ev.root(dir_name)
assert os.path.isdir(os.path.join(env_dir, dir_name))
+
+
+def test_environment_created_from_lockfile_has_view(mock_packages, tmpdir):
+ """When an env is created from a lockfile, a view should be generated for it"""
+ env_a = str(tmpdir.join("a"))
+ env_b = str(tmpdir.join("b"))
+
+ # Create an environment and install a package in it
+ env("create", "-d", env_a)
+ with ev.Environment(env_a):
+ add("libelf")
+ install("--fake")
+
+ # Create another environment from the lockfile of the first environment
+ env("create", "-d", env_b, os.path.join(env_a, "spack.lock"))
+
+ # Make sure the view was created
+ with ev.Environment(env_b) as e:
+ assert os.path.isdir(e.view_path_default)