summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGreg Becker <becker33@llnl.gov>2019-11-01 12:00:16 -0500
committerTodd Gamblin <tgamblin@llnl.gov>2019-11-04 23:35:23 -0700
commitfbb5cf944bc9aadc7a37b8508f5c168656681a2b (patch)
treefdf3c6bf7747c4b2b153b4de8a66d750b4629e5d /lib
parent385e41d70b6562e19a549f9141697ba12b4e7b6d (diff)
downloadspack-fbb5cf944bc9aadc7a37b8508f5c168656681a2b.tar.gz
spack-fbb5cf944bc9aadc7a37b8508f5c168656681a2b.tar.bz2
spack-fbb5cf944bc9aadc7a37b8508f5c168656681a2b.tar.xz
spack-fbb5cf944bc9aadc7a37b8508f5c168656681a2b.zip
environments: make shell modifications partially unconditional (#13523)
* environments: make shell modifications partially unconditional * flake * missing module name * add regression test * flake
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/environment.py24
-rw-r--r--lib/spack/spack/test/cmd/env.py14
2 files changed, 37 insertions, 1 deletions
diff --git a/lib/spack/spack/environment.py b/lib/spack/spack/environment.py
index 2507d1a254..4ab01cb250 100644
--- a/lib/spack/spack/environment.py
+++ b/lib/spack/spack/environment.py
@@ -1055,8 +1055,24 @@ class Environment(object):
'': ['CMAKE_PREFIX_PATH']
}
+ def unconditional_environment_modifications(self, view):
+ """List of environment (shell) modifications to be processed for view.
+
+ This list does not depend on the specs in this environment"""
+ env = spack.util.environment.EnvironmentModifications()
+
+ for subdir, vars in self.prefix_inspections.items():
+ full_subdir = os.path.join(view.root, subdir)
+ for var in vars:
+ env.prepend_path(var, full_subdir)
+
+ return env
+
def environment_modifications_for_spec(self, spec, view=None):
- """List of environment modifications to be processed."""
+ """List of environment (shell) modifications to be processed for spec.
+
+ This list is specific to the location of the spec or its projection in
+ the view."""
spec = spec.copy()
if view:
spec.prefix = Prefix(view.view().get_projection_for_spec(spec))
@@ -1089,6 +1105,9 @@ class Environment(object):
# No default view to add to shell
return env_mod.shell_modifications(shell)
+ env_mod.extend(self.unconditional_environment_modifications(
+ self.default_view))
+
for _, spec in self.concretized_specs():
if spec in self.default_view:
env_mod.extend(self.environment_modifications_for_spec(
@@ -1107,6 +1126,9 @@ class Environment(object):
# No default view to add to shell
return env_mod.shell_modifications(shell)
+ env_mod.extend(self.unconditional_environment_modifications(
+ self.default_view).reversed())
+
for _, spec in self.concretized_specs():
if spec in self.default_view:
env_mod.extend(
diff --git a/lib/spack/spack/test/cmd/env.py b/lib/spack/spack/test/cmd/env.py
index 4e544ef757..b1e9e579ae 100644
--- a/lib/spack/spack/test/cmd/env.py
+++ b/lib/spack/spack/test/cmd/env.py
@@ -1703,6 +1703,20 @@ def test_env_activate_csh_prints_shell_output(
assert "alias despacktivate" in out
+@pytest.mark.regression('12719')
+def test_env_activate_default_view_root_unconditional(env_deactivate,
+ mutable_mock_env_path):
+ """Check that the root of the default view in the environment is added
+ to the shell unconditionally."""
+ env('create', 'test', add_view=True)
+
+ with ev.read('test') as e:
+ viewdir = e.default_view.root
+
+ out = env('activate', '--sh', 'test')
+ assert 'PATH=%s' % os.path.join(viewdir, 'bin') in out
+
+
def test_concretize_user_specs_together():
e = ev.create('coconcretization')
e.concretization = 'together'