mirror of
https://github.com/envmodules/modules.git
synced 2026-06-07 00:25:05 +08:00
Introduce 'module-info loaded' modulefile command
Add 'loaded' sub-command to the 'module-info' modulefile Tcl command. This new sub-command returns name of the modules currently loaded corresponding to the name passed as argument. May return multiple modules if passed name matches more than one loaded modules. Document new command in modulefile.4 and test it with a 285-info-loaded tests in 50-cmds suite. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913.
This commit is contained in:
@@ -317,6 +317,13 @@ the *modulefile* is being loaded.
|
||||
*modulefile* with name and version, another symbolic *modulefile* name
|
||||
or a *modulefile* alias.
|
||||
|
||||
**module-info loaded** modulefile
|
||||
|
||||
Returns the names of currently loaded modules matching passed *modulefile*.
|
||||
The parameter *modulefile* might either be a full qualified *modulefile*
|
||||
with name and version or just a directory which in case all loaded
|
||||
*modulefiles* from the directory will be returned.
|
||||
|
||||
**module-version** modulefile version-name...
|
||||
|
||||
Assigns the symbolic *version-name* to the *modulefile*. This command
|
||||
|
||||
@@ -926,6 +926,10 @@ proc module-info {what {more {}}} {
|
||||
lassign [getModuleNameVersion $more 1] mod
|
||||
return [resolveModuleVersionOrAlias $mod]
|
||||
}
|
||||
{loaded} {
|
||||
lassign [getModuleNameVersion $more 1] mod
|
||||
return [getLoadedMatchingName $mod "returnall"]
|
||||
}
|
||||
default {
|
||||
error "module-info $what not supported"
|
||||
return {}
|
||||
@@ -2626,16 +2630,25 @@ proc getLoadedWithClosestName {name} {
|
||||
|
||||
# return the currently loaded module whose name is equal or include the name
|
||||
# passed as argument. if no loaded module match, an empty string is returned.
|
||||
proc getLoadedMatchingName {name} {
|
||||
set ret ""
|
||||
proc getLoadedMatchingName {name {behavior "returnlast"}} {
|
||||
set ret {}
|
||||
set retmax 0
|
||||
set namesplit [split $name "/"]
|
||||
|
||||
# compare name to each currently loaded module name, if multiple mod
|
||||
# match name, the last loaded module will be returned
|
||||
# match name:
|
||||
foreach mod [getLoadedModuleList] {
|
||||
if {[string first "$name/" "$mod/"] == 0} {
|
||||
set ret $mod
|
||||
switch -- $behavior {
|
||||
{returnlast} {
|
||||
# the last loaded module will be returned
|
||||
set ret $mod
|
||||
}
|
||||
{returnall} {
|
||||
# all loaded modules will be returned
|
||||
lappend ret $mod
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
30
testsuite/modulefiles/info/loaded
Normal file
30
testsuite/modulefiles/info/loaded
Normal file
@@ -0,0 +1,30 @@
|
||||
#%Module1.0
|
||||
|
||||
##############################################################################
|
||||
# Modules Revision 3.0
|
||||
# Providing a flexible user environment
|
||||
#
|
||||
# File: info/%M%
|
||||
# Revision: %I%
|
||||
# First Edition: 2017/11/30
|
||||
# Last Mod.: %U%, %G%
|
||||
#
|
||||
# Authors: Xavier Delaruelle, xavier.delaruelle@cea.fr
|
||||
#
|
||||
# Description: Testuite modulefile
|
||||
# Command:
|
||||
# Sub-Command: setenv, module-info loaded
|
||||
#
|
||||
# Invocation: load @M@/@V@
|
||||
# Result: %R{
|
||||
# }R%
|
||||
# Comment: %C{
|
||||
# The 'module-info loaded name' command retrieves loaded version
|
||||
# of the given module 'name'
|
||||
# }C%
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
setenv testsuite1 "[module-info loaded info/name]"
|
||||
setenv testsuite2 "[module-info loaded info]"
|
||||
setenv testsuite3 "[module-info loaded inf]"
|
||||
98
testsuite/modules.50-cmds/285-info-loaded.exp
Normal file
98
testsuite/modules.50-cmds/285-info-loaded.exp
Normal file
@@ -0,0 +1,98 @@
|
||||
##############################################################################
|
||||
# Modules Revision 3.0
|
||||
# Providing a flexible user environment
|
||||
#
|
||||
# File: modules.50-cmds/%M%
|
||||
# Revision: %I%
|
||||
# First Edition: 2017/11/30
|
||||
# Last Mod.: %U%, %G%
|
||||
#
|
||||
# Authors: Xavier Delaruelle, xavier.delaruelle@cea.fr
|
||||
#
|
||||
# Description: Testuite testsequence
|
||||
# Command: load
|
||||
# Modulefiles: info/loaded, info/name, info/type
|
||||
# Sub-Command:
|
||||
#
|
||||
# Comment: %C{
|
||||
# Tests the 'module-info loaded' modulefile subcommand
|
||||
# }C%
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
set module "info/loaded"
|
||||
set modulefile "$modpath/$module"
|
||||
|
||||
set module1 "info/name"
|
||||
set modulefile1 "$modpath/$module1"
|
||||
|
||||
set module2 "info/type"
|
||||
set modulefile2 "$modpath/$module2"
|
||||
|
||||
|
||||
#
|
||||
# The tests
|
||||
#
|
||||
|
||||
lappend ans [list set testsuite1 ""]
|
||||
lappend ans [list set testsuite2 ""]
|
||||
lappend ans [list set testsuite3 ""]
|
||||
lappend ans [list setpath LOADEDMODULES $module]
|
||||
lappend ans [list setpath _LMFILES_ $modulefile]
|
||||
|
||||
testouterr_cmd "sh" "load $module" $ans ""
|
||||
|
||||
if { $verbose > 0 } {
|
||||
send_user "\tSetup LOADEDMODULES = '$module1'\n"
|
||||
send_user "\tSetup _LMFILES_ = '$modulefile1'\n"
|
||||
}
|
||||
set env(LOADEDMODULES) $module1
|
||||
set env(_LMFILES_) $modulefile1
|
||||
|
||||
set ans [list]
|
||||
lappend ans [list set testsuite1 "$module1"]
|
||||
lappend ans [list set testsuite2 "$module1"]
|
||||
lappend ans [list set testsuite3 ""]
|
||||
lappend ans [list setpath LOADEDMODULES "$module1:$module"]
|
||||
lappend ans [list setpath _LMFILES_ "$modulefile1:$modulefile"]
|
||||
|
||||
testouterr_cmd_re "sh" "load $module" $ans ""
|
||||
|
||||
|
||||
|
||||
if { $verbose > 0 } {
|
||||
send_user "\tSetup LOADEDMODULES = '$module1:$module2'\n"
|
||||
send_user "\tSetup _LMFILES_ = '$modulefile1:$modulefile2'\n"
|
||||
}
|
||||
set env(LOADEDMODULES) "$module1:$module2"
|
||||
set env(_LMFILES_) "$modulefile1:$modulefile2"
|
||||
|
||||
set ans [list]
|
||||
lappend ans [list set testsuite1 "$module1"]
|
||||
lappend ans [list set testsuite2 "$module1 $module2"]
|
||||
lappend ans [list set testsuite3 ""]
|
||||
lappend ans [list setpath LOADEDMODULES "$module1:$module2:$module"]
|
||||
lappend ans [list setpath _LMFILES_ "$modulefile1:$modulefile2:$modulefile"]
|
||||
|
||||
testouterr_cmd_re "sh" "load $module" $ans ""
|
||||
|
||||
|
||||
#
|
||||
# Cleanup
|
||||
#
|
||||
|
||||
# Clean up the environment
|
||||
if { $verbose > 0 } {
|
||||
send_user "\tUnset LOADEDMODULES\n"
|
||||
send_user "\tUnset _LMFILES_\n"
|
||||
}
|
||||
unset env(LOADEDMODULES)
|
||||
unset env(_LMFILES_)
|
||||
|
||||
unset ans
|
||||
unset modulefile
|
||||
unset module
|
||||
unset modulefile1
|
||||
unset module1
|
||||
unset modulefile2
|
||||
unset module2
|
||||
@@ -37,71 +37,71 @@ set len [string length $modpath]
|
||||
set lrep [expr {($test_cols - $len - 2)/2}]
|
||||
set rrep [expr {$test_cols - $len - 2 - $lrep}]
|
||||
set ts_sh "[string repeat {-} $lrep] $modpath [string repeat {-} $rrep]
|
||||
alias/1.0 info/type loc_rc7/0.9 log/err_file symlink2/2.0
|
||||
alias/2.0 info/user loc_rc7/1(@) log/err_syslog system/2.0
|
||||
append/0.1 info/userexp loc_rc7/1.2 modbad/append-path test/1.0
|
||||
append/0.2 inforc/1.0 loc_rc7/bar(@) modbad/autoinit test/1.2
|
||||
append/1.0 inforc/2.0(avail:bar:default) loc_rc8/0.9(@) modbad/foo test/2.0
|
||||
append/1.1 inforc/foo(@) loc_rc8/1.0 modbad/help tr2_loc(trreg)
|
||||
append/2.0 load/00 loc_sym/1.0 modbad/is-avail tr2_loc/al1(tr2unstable:@)
|
||||
append/2.1 load/10 loc_sym/alias1 modbad/is-loaded tr2_loc/al2(tr2bar:@)
|
||||
append/2.2 load/11 loc_sym/alias2 modbad/is-saved tr2_loc/al3(default:tr2exp:trreg:@)
|
||||
averssort/1(@) load/12 loc_sym/alias3 modbad/is-used tr2_loc/al4(@)
|
||||
averssort/1.2.4(@) load/13 loc_sym/alias4 modbad/path tr2_loc/al5(default:trreg:@)
|
||||
averssort/1.10(@) load/14 loc_sym/alias5 modbad/paths tr_loc/al1(tr2unstable:trunstable:@)
|
||||
bad/after(good) load/15 loc_sym/alias6 modbad/prepend-path tr_loc/al2(default:tr2bar:tr2exp:trbar:trreg:@)
|
||||
bad/before load/16 loc_sym/alias7 modbad/remove-path tr_loc/al3(trexp:@)
|
||||
bad2/body load/17 loc_sym/exec1 module/2.0 tr_loc/al4(@)
|
||||
bad2/proc load/18 loc_sym/exec2 module/bad tr_loc/al5(@)
|
||||
break/1.0 load/19 loc_sym/getvers1 module/err trace/all_off
|
||||
break/2.0 load/20 loc_sym/getvers2 module/lbad trace/all_on
|
||||
break/3.0 load/21 loc_sym/getvers3 module/lerr uname/domain
|
||||
break/4.0 load/22 loc_sym/getvers4 module/lunk uname/machine
|
||||
break/5.0 load/23 loc_sym/getvers5 module/meta uname/nodename
|
||||
break/6.0 load/24 loc_sym/getvers6 module/unk uname/release
|
||||
chdir/1.0 load/25 loc_sym/getvers7 prepend/0.1 uname/sysname
|
||||
chdir/2.0 load/26 loc_sym/getvers8 prepend/0.2 uname/version
|
||||
chdir/3.0 load/27 loc_sym/versinf1 prepend/1.0 unsetenv/0.8
|
||||
chdir/4.0 load/28 loc_sym/versinf2 prepend/1.1 unsetenv/0.9
|
||||
coll/a load/29 loc_sym/versinf3 prepend/2.0 unsetenv/1.0
|
||||
coll/b load/30 loc_sym/versinf4 prepend/2.1 use/1.0(default)
|
||||
coll/c load/all(default) loc_sym/versinf5 prepend/2.2 use/2.0
|
||||
coll/d loc_def/default loc_sym/versinf6 prereq/full use/2.1
|
||||
conflict/full loc_def/truedef loc_sym/versinf7 prereq/module use/2.2
|
||||
conflict/module loc_dv1/1.0 loc_sym/version1 prereq/orlist use/3.0
|
||||
continue/1.0 loc_dv1/2.0 loc_sym/version2 puts/1 use/3.1
|
||||
continue/2.0 loc_dv2/1.0(default) loc_sym/version3 puts/2 use/3.2
|
||||
continue/3.0 loc_dv2/2.0 loc_sym/version4 puts/3 use/4.0
|
||||
continue/4.0 loc_dv3/1.0 loc_sym/version5 puts/4 user/adv
|
||||
continue/5.0 loc_dv3/2.0 loc_sym/version6 puts/5 user/advanced
|
||||
continue/6.0 loc_dv4/1.0 loc_sym/version7 puts/6 user/exp
|
||||
dirmodalias(@) loc_dv6/1.0 loc_sym/version8 recurs/modA user/expert
|
||||
dirmodalias/1.0 loc_dv6/2.0/1.0 loc_sym/version9 recurs/modB user/nov
|
||||
empty/1.0 loc_dv7/1.0 loc_sym/version10 remove/1.0 user/novice
|
||||
eschars/1.0 loc_dv7/2.0(default) loc_sym/version11 remove/2.0 user/undef
|
||||
exit/1.0 loc_dv7/2.0/1.0 loc_sym/version12 setenv/0.8 verbose/msg
|
||||
exit/2.0 loc_dv7/3.0 loc_sym/version13 setenv/1.0 verbose/off
|
||||
exit/3.0 loc_dv8/1.0 loc_sym/version14 spread/1.0 verbose/on
|
||||
exit/4.0 loc_dv8/2.0 loc_sym/version15 spread/2.0 verbose/undef
|
||||
getenv/1.0 loc_dv9/1.0(default) loc_sym/version16 spread/3.0 versions/1.1
|
||||
help/2.0 loc_dv9/2.0 loc_sym/version17 spread/4.0 versions/1.2
|
||||
info/command loc_fq/1.0 loc_sym/version18 spread/5.0 versions/1.3
|
||||
info/commandexp loc_rc1/1.0(foo) loc_sym/version19 spread/6.0 verssort/1
|
||||
info/isavail loc_rc1/2.0 loc_sym/version20 spread/7.0 verssort/1.2.1
|
||||
info/isloaded loc_rc2/1.0(bar:blah:foo) loc_sym/version21 spread/8.0 verssort/1.2.4
|
||||
info/issaved loc_rc2/2.0 loc_sym/version22 spreadrc/dir1/1.0 verssort/1.8-2015-12-01
|
||||
info/isused loc_rc3/1.0(default) loc_sym/version23 spreadrc/dir2/1.0 verssort/1.8-2016-02-01
|
||||
info/mode1 loc_rc3/2.0(cur:stable) loc_tr(reg) spreadrc/dir3/1.0 verssort/1.10
|
||||
info/mode2 loc_rc3/3.0(chk:exp:new:test) loc_tr/1.0(cur:stable) spreadrc/dir4/1.0 whatis/lines
|
||||
info/mode3 loc_rc4/1.0 loc_tr/2.0(next:tr2unstable:trunstable:unstable) spreadrc/dir5/1.0 whatis/multiple
|
||||
info/mode4 loc_rc4/2.0(default) loc_tr/3.0(bar:default:exp:foo:reg:tr2bar:tr2exp:trbar:trexp:trreg) spreadrc/dir6/1.0 whatis/none
|
||||
info/mode5 loc_rc4/3.0 loc_tr/al1(unstable:@) spreadrc/dir7/1.0 whatis/single
|
||||
info/mode6 loc_rc5/1.0 loc_tr/al2(bar:default:exp:reg:trexp:@) spreadrc/dir8/1.0 whatis/string
|
||||
info/name loc_rc5/2.0 loc_tr/al3(default:exp:reg:@) symlink/0.9 x-resource/1
|
||||
info/others loc_rc6/0.9 loc_tr/al4(default:reg:@) symlink/1(@)
|
||||
info/shells loc_rc6/1(@) log/badfac symlink/1.2(default:new)
|
||||
info/shellsexp loc_rc6/1.2(default:new) log/err_both_1 symlink/bar(@)
|
||||
info/specified(foo) loc_rc6/bar(@) log/err_both_2 symlink2/1.0 "
|
||||
alias/1.0 info/specified(foo) loc_rc6/bar(@) log/err_both_2 symlink2/1.0
|
||||
alias/2.0 info/type loc_rc7/0.9 log/err_file symlink2/2.0
|
||||
append/0.1 info/user loc_rc7/1(@) log/err_syslog system/2.0
|
||||
append/0.2 info/userexp loc_rc7/1.2 modbad/append-path test/1.0
|
||||
append/1.0 inforc/1.0 loc_rc7/bar(@) modbad/autoinit test/1.2
|
||||
append/1.1 inforc/2.0(avail:bar:default) loc_rc8/0.9(@) modbad/foo test/2.0
|
||||
append/2.0 inforc/foo(@) loc_rc8/1.0 modbad/help tr2_loc(trreg)
|
||||
append/2.1 load/00 loc_sym/1.0 modbad/is-avail tr2_loc/al1(tr2unstable:@)
|
||||
append/2.2 load/10 loc_sym/alias1 modbad/is-loaded tr2_loc/al2(tr2bar:@)
|
||||
averssort/1(@) load/11 loc_sym/alias2 modbad/is-saved tr2_loc/al3(default:tr2exp:trreg:@)
|
||||
averssort/1.2.4(@) load/12 loc_sym/alias3 modbad/is-used tr2_loc/al4(@)
|
||||
averssort/1.10(@) load/13 loc_sym/alias4 modbad/path tr2_loc/al5(default:trreg:@)
|
||||
bad/after(good) load/14 loc_sym/alias5 modbad/paths tr_loc/al1(tr2unstable:trunstable:@)
|
||||
bad/before load/15 loc_sym/alias6 modbad/prepend-path tr_loc/al2(default:tr2bar:tr2exp:trbar:trreg:@)
|
||||
bad2/body load/16 loc_sym/alias7 modbad/remove-path tr_loc/al3(trexp:@)
|
||||
bad2/proc load/17 loc_sym/exec1 module/2.0 tr_loc/al4(@)
|
||||
break/1.0 load/18 loc_sym/exec2 module/bad tr_loc/al5(@)
|
||||
break/2.0 load/19 loc_sym/getvers1 module/err trace/all_off
|
||||
break/3.0 load/20 loc_sym/getvers2 module/lbad trace/all_on
|
||||
break/4.0 load/21 loc_sym/getvers3 module/lerr uname/domain
|
||||
break/5.0 load/22 loc_sym/getvers4 module/lunk uname/machine
|
||||
break/6.0 load/23 loc_sym/getvers5 module/meta uname/nodename
|
||||
chdir/1.0 load/24 loc_sym/getvers6 module/unk uname/release
|
||||
chdir/2.0 load/25 loc_sym/getvers7 prepend/0.1 uname/sysname
|
||||
chdir/3.0 load/26 loc_sym/getvers8 prepend/0.2 uname/version
|
||||
chdir/4.0 load/27 loc_sym/versinf1 prepend/1.0 unsetenv/0.8
|
||||
coll/a load/28 loc_sym/versinf2 prepend/1.1 unsetenv/0.9
|
||||
coll/b load/29 loc_sym/versinf3 prepend/2.0 unsetenv/1.0
|
||||
coll/c load/30 loc_sym/versinf4 prepend/2.1 use/1.0(default)
|
||||
coll/d load/all(default) loc_sym/versinf5 prepend/2.2 use/2.0
|
||||
conflict/full loc_def/default loc_sym/versinf6 prereq/full use/2.1
|
||||
conflict/module loc_def/truedef loc_sym/versinf7 prereq/module use/2.2
|
||||
continue/1.0 loc_dv1/1.0 loc_sym/version1 prereq/orlist use/3.0
|
||||
continue/2.0 loc_dv1/2.0 loc_sym/version2 puts/1 use/3.1
|
||||
continue/3.0 loc_dv2/1.0(default) loc_sym/version3 puts/2 use/3.2
|
||||
continue/4.0 loc_dv2/2.0 loc_sym/version4 puts/3 use/4.0
|
||||
continue/5.0 loc_dv3/1.0 loc_sym/version5 puts/4 user/adv
|
||||
continue/6.0 loc_dv3/2.0 loc_sym/version6 puts/5 user/advanced
|
||||
dirmodalias(@) loc_dv4/1.0 loc_sym/version7 puts/6 user/exp
|
||||
dirmodalias/1.0 loc_dv6/1.0 loc_sym/version8 recurs/modA user/expert
|
||||
empty/1.0 loc_dv6/2.0/1.0 loc_sym/version9 recurs/modB user/nov
|
||||
eschars/1.0 loc_dv7/1.0 loc_sym/version10 remove/1.0 user/novice
|
||||
exit/1.0 loc_dv7/2.0(default) loc_sym/version11 remove/2.0 user/undef
|
||||
exit/2.0 loc_dv7/2.0/1.0 loc_sym/version12 setenv/0.8 verbose/msg
|
||||
exit/3.0 loc_dv7/3.0 loc_sym/version13 setenv/1.0 verbose/off
|
||||
exit/4.0 loc_dv8/1.0 loc_sym/version14 spread/1.0 verbose/on
|
||||
getenv/1.0 loc_dv8/2.0 loc_sym/version15 spread/2.0 verbose/undef
|
||||
help/2.0 loc_dv9/1.0(default) loc_sym/version16 spread/3.0 versions/1.1
|
||||
info/command loc_dv9/2.0 loc_sym/version17 spread/4.0 versions/1.2
|
||||
info/commandexp loc_fq/1.0 loc_sym/version18 spread/5.0 versions/1.3
|
||||
info/isavail loc_rc1/1.0(foo) loc_sym/version19 spread/6.0 verssort/1
|
||||
info/isloaded loc_rc1/2.0 loc_sym/version20 spread/7.0 verssort/1.2.1
|
||||
info/issaved loc_rc2/1.0(bar:blah:foo) loc_sym/version21 spread/8.0 verssort/1.2.4
|
||||
info/isused loc_rc2/2.0 loc_sym/version22 spreadrc/dir1/1.0 verssort/1.8-2015-12-01
|
||||
info/loaded loc_rc3/1.0(default) loc_sym/version23 spreadrc/dir2/1.0 verssort/1.8-2016-02-01
|
||||
info/mode1 loc_rc3/2.0(cur:stable) loc_tr(reg) spreadrc/dir3/1.0 verssort/1.10
|
||||
info/mode2 loc_rc3/3.0(chk:exp:new:test) loc_tr/1.0(cur:stable) spreadrc/dir4/1.0 whatis/lines
|
||||
info/mode3 loc_rc4/1.0 loc_tr/2.0(next:tr2unstable:trunstable:unstable) spreadrc/dir5/1.0 whatis/multiple
|
||||
info/mode4 loc_rc4/2.0(default) loc_tr/3.0(bar:default:exp:foo:reg:tr2bar:tr2exp:trbar:trexp:trreg) spreadrc/dir6/1.0 whatis/none
|
||||
info/mode5 loc_rc4/3.0 loc_tr/al1(unstable:@) spreadrc/dir7/1.0 whatis/single
|
||||
info/mode6 loc_rc5/1.0 loc_tr/al2(bar:default:exp:reg:trexp:@) spreadrc/dir8/1.0 whatis/string
|
||||
info/name loc_rc5/2.0 loc_tr/al3(default:exp:reg:@) symlink/0.9 x-resource/1
|
||||
info/others loc_rc6/0.9 loc_tr/al4(default:reg:@) symlink/1(@)
|
||||
info/shells loc_rc6/1(@) log/badfac symlink/1.2(default:new)
|
||||
info/shellsexp loc_rc6/1.2(default:new) log/err_both_1 symlink/bar(@) "
|
||||
|
||||
#
|
||||
# test
|
||||
|
||||
Reference in New Issue
Block a user