Skip to content

Commit ed17988

Browse files
committed
Fix interp variable reset between evaluations
Fix interpreter variable reset between multiple modulefile or modulerc evaluations when variable initial value is an invalid list. Fixes #570 Signed-off-by: Xavier Delaruelle <[email protected]>
1 parent ca31945 commit ed17988

File tree

6 files changed

+36
-1
lines changed

6 files changed

+36
-1
lines changed

NEWS.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ Modules 5.6.0 (not yet released)
3434
* Doc: describe the :ref:`developer-certificate-of-origin` process now applied
3535
on contributions.
3636
* Doc: add :ref:`add-new-maintainer` guide
37+
* Fix interpreter variable reset between multiple modulefile or modulerc
38+
evaluations when variable initial value is an invalid list. (fix issue #570)
3739

3840
.. _Security policy: https://github.com/envmodules/modules/blob/main/SECURITY.md
3941
.. _Modules chat room: https://matrix.to/#/#modules:matrix.org

tcl/interp.tcl.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,8 @@ proc resetInterpState {itrp fresh dumpVarsVN dumpArrayVarsVN untrackVarsVN\
847847
} elseif {![info exists dumpArrayVars($var)]} {
848848
if {$dumpVars($var) ne [$itrp eval set ::$var]} {
849849
reportDebug "restoring on $itrp var $var"
850-
if {[llength $dumpVars($var)] > 1} {
850+
if {[string is list $dumpVars($var)] && [llength\
851+
$dumpVars($var)] > 1} {
851852
# restore value as list
852853
$itrp eval set ::$var [list $dumpVars($var)]
853854
} else {

testsuite/example/siteconfig.tcl-1

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,5 +671,12 @@ if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_GETMODULEFILEFROMLOADINGMODULE)
671671
report [string length [getModulefileFromLoadingModule foo]]
672672
}
673673

674+
if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST)]} {
675+
switch -- $env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST) {
676+
var {set modulefile_extra_vars [list myvar {"foo"; "bar"}]}
677+
rc_var {set modulerc_extra_vars [list myvar {"foo"; "bar"}]}
678+
}
679+
}
680+
674681

675682
}

testsuite/modulefiles.3/interp/.modulerc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,9 @@ if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_REGULAR)]} {
4747
mix - override {module-version interp/1 [mycmd] $myvar}
4848
}
4949
}
50+
51+
if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST)]} {
52+
switch -- $env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST) {
53+
rc_var {set myvar value}
54+
}
55+
}

testsuite/modulefiles.3/interp/1

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,9 @@ if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_REGULAR)]} {
5858
}
5959
}
6060
}
61+
62+
if {[info exists env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST)]} {
63+
switch -- $env(TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST) {
64+
var {set myvar value}
65+
}
66+
}

testsuite/modules.50-cmds/560-siteconfig-interp.exp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,19 @@ if {[cmpversion $tclsh_version 8.5] > 0} {
125125
unsetenv_var TESTSUITE_ENABLE_SITECONFIG_EXTRA_UNK
126126

127127

128+
# variable value not a list
129+
setenv_var TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST rc_var
130+
set ans [list]
131+
lappend ans [list set _LMFILES_ $mp/interp/1:$mp/foo/1.0]
132+
lappend ans [list set LOADEDMODULES interp/1:foo/1.0]
133+
testouterr_cmd sh {load interp/1 foo/1.0} $ans {}
134+
135+
setenv_var TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST var
136+
testouterr_cmd sh {load interp/1 foo/1.0} $ans {}
137+
138+
unsetenv_var TESTSUITE_ENABLE_SITECONFIG_EXTRA_VALNOTALIST
139+
140+
128141
# extra cmds and vars that supersede existing cmds or variables
129142
setenv_var TESTSUITE_ENABLE_SITECONFIG_EXTRA_SUPERSEDE rc_cmd
130143
set tserr "interp/0\ninterp/1(myproc1:myproc2)\ninterp/2"

0 commit comments

Comments
 (0)