Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix interp variable reset between evaluations #571

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions NEWS.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ Modules 5.6.0 (not yet released)
* Doc: describe the :ref:`developer-certificate-of-origin` process now applied
on contributions.
* Doc: add :ref:`add-new-maintainer` guide
* Fix interpreter variable reset between multiple modulefile or modulerc
evaluations when variable initial value is an invalid list. (fix issue #570)

.. _Security policy: https://github.com/envmodules/modules/blob/main/SECURITY.md
.. _Modules chat room: https://matrix.to/#/#modules:matrix.org
Expand Down
3 changes: 2 additions & 1 deletion tcl/interp.tcl.in
Original file line number Diff line number Diff line change
Expand Up @@ -847,7 +847,8 @@ proc resetInterpState {itrp fresh dumpVarsVN dumpArrayVarsVN untrackVarsVN\
} elseif {![info exists dumpArrayVars($var)]} {
if {$dumpVars($var) ne [$itrp eval set ::$var]} {
reportDebug "restoring on $itrp var $var"
if {[llength $dumpVars($var)] > 1} {
if {[string is list $dumpVars($var)] && [llength\
$dumpVars($var)] > 1} {
# restore value as list
$itrp eval set ::$var [list $dumpVars($var)]
} else {
Expand Down
7 changes: 7 additions & 0 deletions testsuite/example/siteconfig.tcl-1
Original file line number Diff line number Diff line change
Expand Up @@ -671,5 +671,12 @@ if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_GETMODULEFILEFROMLOADINGMODULE)
report [string length [getModulefileFromLoadingModule foo]]
}

if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST)]} {
switch -- $env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST) {
var {set modulefile_extra_vars [list myvar {"foo"; "bar"}]}
rc_var {set modulerc_extra_vars [list myvar {"foo"; "bar"}]}
}
}


}
6 changes: 6 additions & 0 deletions testsuite/modulefiles.3/interp/.modulerc
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,9 @@ if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_REGULAR)]} {
mix - override {module-version interp/1 [mycmd] $myvar}
}
}

if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST)]} {
switch -- $env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST) {
rc_var {set myvar value}
}
}
6 changes: 6 additions & 0 deletions testsuite/modulefiles.3/interp/1
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,9 @@ if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_REGULAR)]} {
}
}
}

if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST)]} {
switch -- $env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST) {
var {set myvar value}
}
}
13 changes: 13 additions & 0 deletions testsuite/modules.50-cmds/560-siteconfig-interp.exp
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,19 @@ if {[cmpversion $tclsh_version 8.5] > 0} {
unsetenv_var TESTSUITE_ENABLE_SITECONFIG_EXTRA_UNK


# variable value not a list
setenv_var TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST rc_var
set ans [list]
lappend ans [list set _LMFILES_ $mp/interp/1:$mp/foo/1.0]
lappend ans [list set LOADEDMODULES interp/1:foo/1.0]
testouterr_cmd sh {load interp/1 foo/1.0} $ans {}

setenv_var TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST var
testouterr_cmd sh {load interp/1 foo/1.0} $ans {}

unsetenv_var TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST


# extra cmds and vars that supersede existing cmds or variables
setenv_var TESTSUITE_ENABLE_SITECONFIG_EXTRA_SUPERSEDE rc_cmd
set tserr "interp/0\ninterp/1(myproc1:myproc2)\ninterp/2"
Expand Down