Skip to content

Commit f907194

Browse files
committed
Update tags set with prereq on all loaded mods
Update tags set through prereq command on all already loaded requirements. Closes #459.
1 parent 16a1525 commit f907194

File tree

6 files changed

+57
-15
lines changed

6 files changed

+57
-15
lines changed

NEWS.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ Modules 5.1.1 (not yet released)
2424
issue #456)
2525
* Report a global known error when current working directory cannot be
2626
retrieved due to the removal of this directory. (fix issue #457)
27+
* Update tags set through :mfcmd:`prereq` command on all already loaded
28+
requirements. (fix issue #459)
2729

2830

2931
Modules 5.1.0 (2022-04-30)

doc/source/design/module-tags.rst

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,8 +344,7 @@ Updating tags on already loaded modules
344344

345345
- With ``prereq``-like commands:
346346

347-
- only the first loaded requirement in specified list gets its tag list
348-
updated
347+
- all loaded requirement in specified list get their tag list updated
349348
- loading requirement does not get its tag list updated (no real use case
350349
foreseen for cyclic dependencies)
351350

tcl/mfinterp.tcl.in

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1722,19 +1722,20 @@ proc prereq {args} {
17221722
loadRequirementModuleList $tag_list {*}$args
17231723
}
17241724

1725+
set loadedmod_list {}
17251726
foreach mod $args {
1726-
# get first loaded or loading mod in args list
1727+
# get all loaded or loading mod in args list
17271728
if {[set loadedmod [getLoadedMatchingName $mod returnfirst]] ne {} ||\
17281729
[set loadedmod [getLoadedMatchingName $mod returnfirst 1]] ne {}} {
1729-
break
1730+
lappend loadedmod_list $loadedmod
17301731
}
17311732
}
17321733

1733-
if {$loadedmod eq {}} {
1734+
if {[llength $loadedmod_list] == 0} {
17341735
reportMissingPrereqError $curmodnamevr {*}$args
17351736
} elseif {![getConf auto_handling]} {
1736-
# apply missing tag to first loaded module found
1737-
cmdModuleTag 0 0 $tag_list $loadedmod
1737+
# apply missing tag to all loaded module found
1738+
cmdModuleTag 0 0 $tag_list {*}$loadedmod_list
17381739
}
17391740

17401741
return {}

tcl/modeval.tcl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -618,15 +618,16 @@ proc loadRequirementModuleList {tag_list args} {
618618
set prereqloaded 0
619619

620620
# calling procedure must have already parsed module specification in args
621+
set loadedmod_list {}
621622
foreach mod $args {
622-
# get first loaded or loading mod in args list
623+
# get all loaded or loading mod in args list
623624
if {[set loadedmod [getLoadedMatchingName $mod returnfirst]] ne {} ||\
624625
[set loadedmod [getLoadedMatchingName $mod returnfirst 1]] ne {}} {
625-
break
626+
lappend loadedmod_list $loadedmod
626627
}
627628
}
628629

629-
if {$loadedmod eq {}} {
630+
if {[llength $loadedmod_list] == 0} {
630631
set imax [llength $args]
631632
# if prereq list specified, try to load first then
632633
# try next if load of first module not successful
@@ -668,8 +669,8 @@ proc loadRequirementModuleList {tag_list args} {
668669
releaseHeldReport {*}$holdidlist
669670
} else {
670671
set prereqloaded 1
671-
# apply missing tag to first loaded module found
672-
cmdModuleTag 0 0 $tag_list $loadedmod
672+
# apply missing tag to all loaded module found
673+
cmdModuleTag 0 0 $tag_list {*}$loadedmod_list
673674
}
674675

675676
return [list $ret $prereqloaded]

testsuite/modulefiles.3/tag/8.0

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,5 +143,8 @@ if {[info exists env(TESTSUITE_TAG_OPT)]} {
143143
variant --boolean bar
144144
variant --boolean foo
145145
}
146+
prtag13 {
147+
prereq --tag=foo foo/1.0 bar/1.0
148+
}
146149
}
147150
}

testsuite/modules.50-cmds/465-tag-opt.exp

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ lappend ans [list set LOADEDMODULES foo/1.0:$mod]
703703
testouterr_cmd sh "load --auto $mod" $ans {}
704704
testouterr_cmd sh "load --no-auto $mod" $ans {}
705705

706-
# multiple prereqs already loaded (first one updated only)
706+
# multiple prereqs already loaded
707707
setenv_var TESTSUITE_TAG_OPT prtag10
708708
setenv_loaded_module [list bar/1.0 foo/1.0] [list $mp/bar/1.0 $mp/foo/1.0]
709709
setenv_path_var __MODULES_LMEXTRATAG foo/1.0&foo
@@ -712,8 +712,8 @@ set ans [list]
712712
lappend ans [list set __MODULES_LMPREREQ $mod&foo/1.0|bar/1.0]
713713
lappend ans [list set _LMFILES_ $mp/bar/1.0:$mp/foo/1.0:$modfile]
714714
lappend ans [list set LOADEDMODULES bar/1.0:foo/1.0:$mod]
715-
lappend ans [list set __MODULES_LMEXTRATAG foo/1.0&foo&hidden-loaded]
716-
lappend ans [list set __MODULES_LMTAG foo/1.0&foo&hidden-loaded]
715+
lappend ans [list set __MODULES_LMEXTRATAG foo/1.0&foo&hidden-loaded:bar/1.0&hidden-loaded&foo]
716+
lappend ans [list set __MODULES_LMTAG foo/1.0&foo&hidden-loaded:bar/1.0&hidden-loaded&foo]
717717
testouterr_cmd sh "load --auto $mod" $ans {}
718718

719719
# auto-loaded tag set manually on already loaded (prereq)
@@ -741,9 +741,45 @@ lappend ans [list set __MODULES_LMTAG foo/1.0&keep-loaded&foo&auto-loaded]
741741
set tserr [msg_top_load $mod {} foo/1.0 {}]
742742
testouterr_cmd sh "load --auto $mod" $ans $tserr
743743

744+
# tag set manually on second optional requirement (prereq)
745+
setenv_var TESTSUITE_TAG_OPT prtag13
746+
setenv_loaded_module [list foo/1.0 $mod] [list $mp/foo/1.0 $modfile]
747+
setenv_path_var __MODULES_LMEXTRATAG foo/1.0&foo
748+
setenv_path_var __MODULES_LMTAG foo/1.0&foo&auto-loaded
749+
setenv_path_var __MODULES_LMPREREQ $mod&foo/1.0|bar/1.0
750+
set ans [list]
751+
lappend ans [list set __MODULES_LMPREREQ $mod&foo/1.0|bar/1.0]
752+
lappend ans [list set _LMFILES_ $mp/foo/1.0:$mp/bar/1.0:$modfile]
753+
lappend ans [list set LOADEDMODULES foo/1.0:bar/1.0:$mod]
754+
lappend ans [list set __MODULES_LMEXTRATAG foo/1.0&foo:bar/1.0&foo]
755+
lappend ans [list set __MODULES_LMTAG foo/1.0&foo&auto-loaded:bar/1.0&foo]
756+
#FIXME: tag applied by DepRe reloading module does not appear on info messages
757+
set tserr [msg_top_load bar/1.0 {} {} $mod]
758+
testouterr_cmd sh "load --auto bar/1.0" $ans $tserr
759+
760+
# both requirement loaded, but not tagged
761+
unsetenv_path_var __MODULES_LMEXTRATAG
762+
unsetenv_path_var __MODULES_LMTAG
763+
unsetenv_path_var __MODULES_LMPREREQ
764+
setenv_loaded_module [list foo/1.0 bar/1.0] [list $mp/foo/1.0 $mp/bar/1.0]
765+
set ans [list]
766+
lappend ans [list set __MODULES_LMPREREQ $mod&foo/1.0|bar/1.0]
767+
lappend ans [list set _LMFILES_ $mp/foo/1.0:$mp/bar/1.0:$modfile]
768+
lappend ans [list set LOADEDMODULES foo/1.0:bar/1.0:$mod]
769+
lappend ans [list set __MODULES_LMEXTRATAG foo/1.0&foo:bar/1.0&foo]
770+
lappend ans [list set __MODULES_LMTAG foo/1.0&foo:bar/1.0&foo]
771+
set tserr {}
772+
#FIXME: info messages do not mention that requirements have been updated with tag
773+
testouterr_cmd sh "load --auto $mod" $ans $tserr
774+
testouterr_cmd sh "load --no-auto $mod" $ans $tserr
775+
set tserr [msg_tag {foo/1.0 <foo>}]\n[msg_tag {bar/1.0 <foo>}]\n[msg_load $mod]
776+
testouterr_cmd sh "load -v --auto $mod" $ans $tserr
777+
testouterr_cmd sh "load -v --no-auto $mod" $ans $tserr
778+
744779

745780
unsetenv_path_var __MODULES_LMEXTRATAG
746781
unsetenv_path_var __MODULES_LMTAG
782+
unsetenv_path_var __MODULES_LMPREREQ
747783
unsetenv_loaded_module
748784

749785

0 commit comments

Comments
 (0)