aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2015-04-29 17:28:49 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2015-04-29 17:28:49 -0700
commitf30872a7b55da98c5b027edc4195441743f3bfab (patch)
treea47c0e32877b7b3a48d70e613476fb588624e9f3
parent9c3a9a1e7333feacff0a7d5d08e667b346c97899 (diff)
Recalculate exported variables when universal variable is erased
Fixes #2046
-rw-r--r--env.cpp4
-rw-r--r--tests/test3.in4
2 files changed, 8 insertions, 0 deletions
diff --git a/env.cpp b/env.cpp
index 13aacf57..1a04665e 100644
--- a/env.cpp
+++ b/env.cpp
@@ -901,6 +901,7 @@ int env_remove(const wcstring &key, int var_mode)
!(var_mode & ENV_GLOBAL) &&
!(var_mode & ENV_LOCAL))
{
+ bool is_exported = uvars()->get_export(key);
erased = uvars() && uvars()->remove(key);
if (erased)
{
@@ -911,6 +912,9 @@ int env_remove(const wcstring &key, int var_mode)
ev.arguments.push_back(key);
event_fire(&ev);
}
+
+ if (is_exported)
+ mark_changed_exported();
}
react_to_variable_change(key);
diff --git a/tests/test3.in b/tests/test3.in
index 51d545c6..970741d1 100644
--- a/tests/test3.in
+++ b/tests/test3.in
@@ -149,6 +149,10 @@ else
end
set -Ue __fish_test_universal_variables_variable_foo
+
+# Should no longer be in environment (#2046)
+env | sgrep __fish_test_universal_variables_variable_foo
+
set -Ux __fish_test_universal_variables_variable_foo bar
set -U __fish_test_universal_variables_variable_foo baz
if test (/bin/sh -c 'echo $__fish_test_universal_variables_variable_foo') = baz -a (../fish -c 'echo $__fish_test_universal_variables_variable_foo') = baz