Skip to content

Commit 982f662

Browse files
committed
Set tag on modvr desig of loaded mod
Correctly detect tags set on loaded modules when refreshing them. Update the cacheCurrentModules procedure to record the tags of loaded modules also on the module name version and variant list designation. So when the `module-info tags` command is called from a modulefile loaded with variant set, it correctly retrieves the tags defined on this module if currently loaded. Add the report mode '6' on getVariantList procedure to proceed like mode '1' but without updating the key map reference.
1 parent f508ec2 commit 982f662

File tree

2 files changed

+77
-27
lines changed

2 files changed

+77
-27
lines changed

tcl/modfind.tcl.in

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -775,7 +775,7 @@ proc getVariantList {mod {report 0} {excl_dflval 0} {from_spec 0}} {
775775
3 {lappend ret $vrname [lindex $vrarr($vrname) 0] [lindex\
776776
$vrarr($vrname) 1]}
777777
2 {lappend ret [list $vrname $vrarr($vrname) $vrisbool($vrname)]}
778-
1 - 5 {
778+
1 - 5 - 6 {
779779
if {$vrisbool($vrname)} {
780780
if {$vrarr($vrname)} {
781781
lappend ret +$vrname
@@ -797,13 +797,15 @@ proc getVariantList {mod {report 0} {excl_dflval 0} {from_spec 0}} {
797797
set sc $::g_variantShortcut($vrname)
798798
lappend ret $sc$vrarr($vrname)
799799
# track if variant shortcut has been reported to build key
800-
if {![info exists ::g_used_va($sc)]} {
800+
# unless if key should not be updated (report mode '6')
801+
if {$report != 6 && ![info exists ::g_used_va($sc)]} {
801802
set ::g_used_va($sc) $vrname
802803
}
803804
} else {
804805
lappend ret $vrname=$vrarr($vrname)
805806
# track if var=val variant has been reported to build key
806-
if {![info exists ::g_used_va(val)]} {
807+
# unless if key should not be updated (report mode '6')
808+
if {$report != 6 && ![info exists ::g_used_va(val)]} {
807809
set ::g_used_va(val) 1
808810
}
809811
}
@@ -1945,14 +1947,24 @@ proc cacheCurrentModules {{exitonerr 1}} {
19451947
set modlist [getLoadedModuleList]
19461948

19471949
if {[llength $modlist] == [llength $modfilelist]} {
1948-
# cache declared tags of loaded modules
1949-
foreach modtag [getLoadedModuleTagList] {
1950-
setModuleTag {*}$modtag
1951-
}
1952-
19531950
# cache declared variant of loaded modules
19541951
foreach modvrspec [getLoadedModuleVariantList] {
19551952
setLoadedVariant {*}$modvrspec
1953+
# prepare modvr designation of loaded mod needed in next steps
1954+
set mod [lindex $modvrspec 0]
1955+
set vrlist [getVariantList $mod 6]
1956+
set modvr [list $mod {*}$vrlist]
1957+
set modvrarr($mod) $modvr
1958+
}
1959+
1960+
# cache declared tags of loaded modules
1961+
foreach modtag [getLoadedModuleTagList] {
1962+
setModuleTag {*}$modtag
1963+
# also record tag over full mod and vr designation
1964+
set mod [lindex $modtag 0]
1965+
if {[info exists modvrarr($mod)]} {
1966+
setModuleTag $modvrarr($mod) {*}[lrange $modtag 1 end]
1967+
}
19561968
}
19571969

19581970
# cache declared alternative names of loaded modules
@@ -1987,8 +1999,14 @@ proc cacheCurrentModules {{exitonerr 1}} {
19871999
}
19882000

19892001
foreach mod $modlist {
2002+
# get all tags also recorded on mod and vr designation
2003+
if {[info exists modvrarr($mod)]} {
2004+
set modvr $modvrarr($mod)
2005+
} else {
2006+
set modvr {}
2007+
}
19902008
setLoadedModule $mod [lindex $modfilelist $i] [expr\
1991-
{![isModuleTagged $mod auto-loaded 1]}]
2009+
{![isModuleTagged $mod auto-loaded 1]}] $modvr
19922010
incr i
19932011
}
19942012

testsuite/modules.50-cmds/078-refresh.exp

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,29 @@ lappend ans [list funcfoo "() {" "echo foo1; };"]
100100
lappend ans [list out {echo refresh/1.0}]
101101
testouterr_cmd sh {refresh} $ans {}
102102

103+
# test tags
104+
setenv_var __MODULES_LMTAG refresh/1.0&bar
105+
106+
set ans [list]
107+
lappend ans [list alias altags {echo bar loaded}]
108+
lappend ans [list alias alspec {echo refresh/1.0}]
109+
lappend ans [list alias alcmd {echo refresh}]
110+
lappend ans [list alias alfoo {echo foo1}]
111+
lappend ans [list alias almode {echo refresh}]
112+
lappend ans [list alias alisavail {echo is-avail ok}]
113+
lappend ans [list alias algetenv {echo getenv ok}]
114+
lappend ans [list funcfoo "() {" "echo foo1; };"]
115+
lappend ans [list out {echo refresh/1.0}]
116+
testouterr_cmd sh {refresh} $ans {}
117+
103118
# test tags and variant
104119
setenv_loaded_module refresh/2.0 $mp/refresh/2.0
105120
setenv_var __MODULES_LMTAG refresh/2.0&bar
106121
setenv_var MODULES_ADVANCED_VERSION_SPEC 1
107122
setenv_var __MODULES_LMVARIANT refresh/2.0&foo|1|1|0
108123

109124
set ans [list]
110-
#FIXME: tags associated with loaded module should be found
111-
#lappend ans [list alias altags {echo bar loaded}]
112-
lappend ans [list alias altags {echo }]
125+
lappend ans [list alias altags {echo bar loaded}]
113126
lappend ans [list alias alspec {echo refresh/2.0}]
114127
lappend ans [list alias alfoo {echo foo2}]
115128
lappend ans [list funcfoo "() {" "echo foo2; };"]
@@ -118,11 +131,10 @@ testouterr_cmd sh {refresh} $ans {}
118131

119132
# test evaluation order
120133
setenv_loaded_module [list refresh/1.0 refresh/2.0] [list $mp/refresh/1.0 $mp/refresh/2.0]
134+
setenv_var __MODULES_LMTAG refresh/2.0&bar
121135

122136
set ans [list]
123-
#FIXME: tags associated with loaded module should be found
124-
#lappend ans [list alias altags {echo bar loaded}]
125-
lappend ans [list alias altags {echo }]
137+
lappend ans [list alias altags {echo bar loaded}]
126138
lappend ans [list alias alspec {echo refresh/2.0}]
127139
lappend ans [list alias alisloaded2 {echo is-loaded ok}]
128140
lappend ans [list alias alcmd {echo refresh}]
@@ -143,10 +155,36 @@ testouterr_cmd sh {refresh -v} $ans $tserr2
143155
# verbose output and hidden-loaded module
144156
setenv_var __MODULES_LMTAG refresh/2.0&bar&hidden-loaded
145157
set tserr1 [msg_refresh refresh/1.0]
158+
set ans [list]
159+
lappend ans [list alias altags {echo bar hidden-loaded loaded}]
160+
lappend ans [list alias alspec {echo refresh/2.0}]
161+
lappend ans [list alias alisloaded2 {echo is-loaded ok}]
162+
lappend ans [list alias alcmd {echo refresh}]
163+
lappend ans [list alias alfoo {echo foo2}]
164+
lappend ans [list alias almode {echo refresh}]
165+
lappend ans [list alias alisavail {echo is-avail ok}]
166+
lappend ans [list alias algetenv {echo getenv ok}]
167+
lappend ans [list alias alisloaded1 {echo is-loaded ok}]
168+
lappend ans [list funcfoo "() {" "echo foo2; };"]
169+
lappend ans [list out {echo refresh/1.0}]
170+
lappend ans [list out {echo refresh/2.0}]
146171
testouterr_cmd sh {refresh -v} $ans $tserr2
147172

148173
# verbose output and hidden-loaded module
149174
setenv_var __MODULES_LMTAG refresh/2.0&bar&hidden-loaded&auto-loaded
175+
set ans [list]
176+
lappend ans [list alias altags {echo auto-loaded bar hidden-loaded}]
177+
lappend ans [list alias alspec {echo refresh/2.0}]
178+
lappend ans [list alias alisloaded2 {echo is-loaded ok}]
179+
lappend ans [list alias alcmd {echo refresh}]
180+
lappend ans [list alias alfoo {echo foo2}]
181+
lappend ans [list alias almode {echo refresh}]
182+
lappend ans [list alias alisavail {echo is-avail ok}]
183+
lappend ans [list alias algetenv {echo getenv ok}]
184+
lappend ans [list alias alisloaded1 {echo is-loaded ok}]
185+
lappend ans [list funcfoo "() {" "echo foo2; };"]
186+
lappend ans [list out {echo refresh/1.0}]
187+
lappend ans [list out {echo refresh/2.0}]
150188
testouterr_cmd sh {refresh -v} $ans $tserr1
151189
testouterr_cmd sh {refresh -vv} $ans $tserr2
152190
setenv_var __MODULES_LMTAG refresh/1.0&hidden-loaded&auto-loaded:refresh/2.0&bar&hidden-loaded&auto-loaded
@@ -171,19 +209,17 @@ lappend ans [list funcsp "() { echo f\\\"o;
171209
echo f\\'o; };"]
172210
testouterr_cmd sh {refresh} $ans {}
173211

174-
175212
#
176213
# error during refresh evaluation
177214
#
178215

179216
setenv_loaded_module [list refresh/1.0 refresh/2.0] [list $mp/refresh/1.0 $mp/refresh/2.0]
217+
setenv_var __MODULES_LMTAG refresh/2.0&bar
180218

181219
# break during evaluation
182220
setenv_var TESTSUITE_REFRESH break1
183221
set ans1 [list]
184-
#FIXME: tags associated with loaded module should be found
185-
#lappend ans [list alias altags {echo bar loaded}]
186-
lappend ans1 [list alias altags {echo }]
222+
lappend ans1 [list alias altags {echo bar loaded}]
187223
lappend ans1 [list alias alspec {echo refresh/2.0}]
188224
lappend ans1 [list alias alfoo {echo foo2}]
189225
lappend ans1 [list alias alisloaded1 {echo is-loaded ok}]
@@ -195,10 +231,10 @@ testouterr_cmd sh {refresh} $ans1 [msg_refresh refresh/1.0 $err_evalabort]
195231
# verbose output
196232
testouterr_cmd sh {refresh -v} $ans1 [msg_refresh refresh/1.0 $err_evalabort]\n\n[msg_refresh refresh/2.0{+foo}]
197233
# hidden-loaded/auto-loaded
198-
setenv_var __MODULES_LMTAG refresh/1.0&bar&hidden-loaded&auto-loaded
234+
setenv_var __MODULES_LMTAG refresh/1.0&bar&hidden-loaded&auto-loaded:refresh/2.0&bar
199235
set tserr [msg_refresh refresh/1.0 $err_evalabort]
200236
testouterr_cmd sh {refresh} $ans1 $tserr
201-
unsetenv_var __MODULES_LMTAG
237+
setenv_var __MODULES_LMTAG refresh/2.0&bar
202238

203239
# break in second loaded module
204240
setenv_var TESTSUITE_REFRESH break2
@@ -259,9 +295,7 @@ testouterr_cmd sh {refresh} $ans2 $tserr
259295
# continue command
260296
setenv_var TESTSUITE_REFRESH continue1
261297
set ans [list]
262-
#FIXME: tags associated with loaded module should be found
263-
#lappend ans [list alias altags {echo bar loaded}]
264-
lappend ans [list alias altags {echo }]
298+
lappend ans [list alias altags {echo bar loaded}]
265299
lappend ans [list alias alspec {echo refresh/2.0}]
266300
lappend ans [list alias alisloaded2 {echo is-loaded ok}]
267301
lappend ans [list alias alfoo {echo foo2}]
@@ -274,9 +308,7 @@ testouterr_cmd sh {refresh} $ans {}
274308

275309
setenv_var TESTSUITE_REFRESH continue2
276310
set ans [list]
277-
#FIXME: tags associated with loaded module should be found
278-
#lappend ans [list alias altags {echo bar loaded}]
279-
lappend ans [list alias altags {echo }]
311+
lappend ans [list alias altags {echo bar loaded}]
280312
lappend ans [list alias alspec {echo refresh/2.0}]
281313
lappend ans [list alias alisloaded2 {echo is-loaded ok}]
282314
lappend ans [list alias alcmd {echo refresh}]

0 commit comments

Comments
 (0)