summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2019-07-24 17:25:24 +0200
committerGreg Becker <becker33@llnl.gov>2019-07-24 10:25:24 -0500
commit6fac0ae687664b2662bea57f709db53b6d08bb3f (patch)
tree9f5b3a596aa5af2363e4000b8606e15a4ad55a42 /lib
parenta8b12f0cb6ee74f7cffe617e86261b2e11238573 (diff)
downloadspack-6fac0ae687664b2662bea57f709db53b6d08bb3f.tar.gz
spack-6fac0ae687664b2662bea57f709db53b6d08bb3f.tar.bz2
spack-6fac0ae687664b2662bea57f709db53b6d08bb3f.tar.xz
spack-6fac0ae687664b2662bea57f709db53b6d08bb3f.zip
Fixed a name clash in the 'from_environment_diff' function (#12116)
* Added a unit test reproducing the failure in 12085 * Fixed name clash in the 'from_environment_diff' function The bug reported in #12085 stemmed from a name clash among variables, introduced during the refactor in #10753 and not caught by unit tests and reviews.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/test/environment_modifications.py8
-rw-r--r--lib/spack/spack/util/environment.py22
2 files changed, 18 insertions, 12 deletions
diff --git a/lib/spack/spack/test/environment_modifications.py b/lib/spack/spack/test/environment_modifications.py
index b8bc7d3c34..a57ac74364 100644
--- a/lib/spack/spack/test/environment_modifications.py
+++ b/lib/spack/spack/test/environment_modifications.py
@@ -399,6 +399,7 @@ def test_sanitize_regex(env, blacklist, whitelist, expected, deleted):
assert all(x not in after for x in deleted)
+@pytest.mark.regression('12085')
@pytest.mark.parametrize('before,after,search_list', [
# Set environment variables
({}, {'FOO': 'foo'}, [environment.SetEnv('FOO', 'foo')]),
@@ -420,7 +421,12 @@ def test_sanitize_regex(env, blacklist, whitelist, expected, deleted):
({'FOO_PATH': '/a/path:/b/path'}, {'FOO_PATH': '/c/path:/a/path'}, [
environment.RemovePath('FOO_PATH', '/b/path'),
environment.PrependPath('FOO_PATH', '/c/path')
- ])
+ ]),
+ # Modify two variables in the same environment
+ ({'FOO': 'foo', 'BAR': 'bar'}, {'FOO': 'baz', 'BAR': 'baz'}, [
+ environment.SetEnv('FOO', 'baz'),
+ environment.SetEnv('BAR', 'baz'),
+ ]),
])
def test_from_environment_diff(before, after, search_list):
diff --git a/lib/spack/spack/util/environment.py b/lib/spack/spack/util/environment.py
index 7ad80a7eab..33f1379c4f 100644
--- a/lib/spack/spack/util/environment.py
+++ b/lib/spack/spack/util/environment.py
@@ -607,12 +607,12 @@ class EnvironmentModifications(object):
env.unset(x)
for x in modified_variables:
- before = before[x]
- after = after[x]
- sep = return_separator_if_any(before, after)
+ value_before = before[x]
+ value_after = after[x]
+ sep = return_separator_if_any(value_before, value_after)
if sep:
- before_list = before.split(sep)
- after_list = after.split(sep)
+ before_list = value_before.split(sep)
+ after_list = value_after.split(sep)
# Filter out empty strings
before_list = list(filter(None, before_list))
@@ -623,8 +623,8 @@ class EnvironmentModifications(object):
before_list = list(dedupe(before_list))
after_list = list(dedupe(after_list))
# The reassembled cleaned entries
- before = sep.join(before_list)
- after = sep.join(after_list)
+ value_before = sep.join(before_list)
+ value_after = sep.join(after_list)
# Paths that have been removed
remove_list = [
@@ -638,12 +638,12 @@ class EnvironmentModifications(object):
end = after_list.index(remaining_list[-1])
search = sep.join(after_list[start:end + 1])
except IndexError:
- env.prepend_path(x, after)
+ env.prepend_path(x, value_after)
continue
- if search not in before:
+ if search not in value_before:
# We just need to set the variable to the new value
- env.prepend_path(x, after)
+ env.prepend_path(x, value_after)
else:
try:
prepend_list = after_list[:start]
@@ -663,7 +663,7 @@ class EnvironmentModifications(object):
env.prepend_path(x, item)
else:
# We just need to set the variable to the new value
- env.set(x, after)
+ env.set(x, value_after)
return env