diff --git a/doc/source/design/module-tags.rst b/doc/source/design/module-tags.rst index cee63b1b..720ee4fd 100644 --- a/doc/source/design/module-tags.rst +++ b/doc/source/design/module-tags.rst @@ -48,6 +48,10 @@ Specification - ``super-sticky``: loaded module cannot be unloaded even if forced - ``hidden-loaded``: loaded module not reported by default in ``list`` result +- Tags inherited from module state cannot be set with ``module-tag`` command + + - An error is otherwise thrown + - Modules project may introduce in the future new tags inherited from new states or new specific behaviors - These new tags will supersede tags set by users using the same naming diff --git a/modulecmd.tcl.in b/modulecmd.tcl.in index 0effa233..db2ee29a 100644 --- a/modulecmd.tcl.in +++ b/modulecmd.tcl.in @@ -2675,6 +2675,10 @@ proc module-tag {args} { if {![info exists modarglist]} { knerror {No module specified in argument} } + if {[isInList [list loaded auto-loaded forbidden nearly-forbidden hidden]\ + $tag]} { + knerror "'$tag' is a reserved tag name and cannot be set" + } # skip tag record if application criteria are not met if {$apply} { diff --git a/testsuite/modulefiles.3/tag/.modulerc b/testsuite/modulefiles.3/tag/.modulerc index e8c99b3f..ae674fcc 100644 --- a/testsuite/modulefiles.3/tag/.modulerc +++ b/testsuite/modulefiles.3/tag/.modulerc @@ -23,6 +23,21 @@ if {[info exists env(TESTSUITE_MODULE_TAG_ERR4)]} { if {[info exists env(TESTSUITE_MODULE_TAG_ERR5)]} { module-tag --after 2020-11-01 foo tag/5.0 } +if {[info exists env(TESTSUITE_MODULE_TAG_ERR6)]} { + module-tag loaded tag/5.0 +} +if {[info exists env(TESTSUITE_MODULE_TAG_ERR7)]} { + module-tag auto-loaded tag/5.0 +} +if {[info exists env(TESTSUITE_MODULE_TAG_ERR8)]} { + module-tag forbidden tag/5.0 +} +if {[info exists env(TESTSUITE_MODULE_TAG_ERR9)]} { + module-tag nearly-forbidden tag/5.0 +} +if {[info exists env(TESTSUITE_MODULE_TAG_ERR10)]} { + module-tag hidden tag/5.0 +} if {[info exists env(TESTSUITE_MODULE_TAG_SET1)]} { module-tag foo tag/5.0 tag/6.0 diff --git a/testsuite/modules.50-cmds/440-module-tag.exp b/testsuite/modules.50-cmds/440-module-tag.exp index e9234446..c8ff3606 100644 --- a/testsuite/modules.50-cmds/440-module-tag.exp +++ b/testsuite/modules.50-cmds/440-module-tag.exp @@ -134,6 +134,86 @@ unsetenv_var TESTSUITE_MODULE_TAG_ERR5 # same error rendering than module-tag/module-forbid, so rely on tests made for # these two modulefile commands to check contexts other than load +# test use of reserved tag name +setenv_var TESTSUITE_MODULE_TAG_ERR6 1 +set errmsg {module-tag loaded tag/5.0} +if {[cmpversion $tclsh_version 8.6] == -1} { + set custom " invoked from within +\"if \{\[info exists env(TESTSUITE_MODULE_TAG_ERR6)\]\} \{ + $errmsg +\}\"" + set linenum 26 +} else { + set custom {} + set linenum 27 +} +set tserr [msg_moderr {'loaded' is a reserved tag name and cannot be set} $errmsg $mp/tag/.modulerc $linenum { } {} {} $custom] +testouterr_cmd sh {load tag/5.0} $ans $tserr +unsetenv_var TESTSUITE_MODULE_TAG_ERR6 + +setenv_var TESTSUITE_MODULE_TAG_ERR7 1 +set errmsg {module-tag auto-loaded tag/5.0} +if {[cmpversion $tclsh_version 8.6] == -1} { + set custom " invoked from within +\"if \{\[info exists env(TESTSUITE_MODULE_TAG_ERR7)\]\} \{ + $errmsg +\}\"" + set linenum 29 +} else { + set custom {} + set linenum 30 +} +set tserr [msg_moderr {'auto-loaded' is a reserved tag name and cannot be set} $errmsg $mp/tag/.modulerc $linenum { } {} {} $custom] +testouterr_cmd sh {load tag/5.0} $ans $tserr +unsetenv_var TESTSUITE_MODULE_TAG_ERR7 + +setenv_var TESTSUITE_MODULE_TAG_ERR8 1 +set errmsg {module-tag forbidden tag/5.0} +if {[cmpversion $tclsh_version 8.6] == -1} { + set custom " invoked from within +\"if \{\[info exists env(TESTSUITE_MODULE_TAG_ERR8)\]\} \{ + $errmsg +\}\"" + set linenum 32 +} else { + set custom {} + set linenum 33 +} +set tserr [msg_moderr {'forbidden' is a reserved tag name and cannot be set} $errmsg $mp/tag/.modulerc $linenum { } {} {} $custom] +testouterr_cmd sh {load tag/5.0} $ans $tserr +unsetenv_var TESTSUITE_MODULE_TAG_ERR8 + +setenv_var TESTSUITE_MODULE_TAG_ERR9 1 +set errmsg {module-tag nearly-forbidden tag/5.0} +if {[cmpversion $tclsh_version 8.6] == -1} { + set custom " invoked from within +\"if \{\[info exists env(TESTSUITE_MODULE_TAG_ERR9)\]\} \{ + $errmsg +\}\"" + set linenum 35 +} else { + set custom {} + set linenum 36 +} +set tserr [msg_moderr {'nearly-forbidden' is a reserved tag name and cannot be set} $errmsg $mp/tag/.modulerc $linenum { } {} {} $custom] +testouterr_cmd sh {load tag/5.0} $ans $tserr +unsetenv_var TESTSUITE_MODULE_TAG_ERR9 + +setenv_var TESTSUITE_MODULE_TAG_ERR10 1 +set errmsg {module-tag hidden tag/5.0} +if {[cmpversion $tclsh_version 8.6] == -1} { + set custom " invoked from within +\"if \{\[info exists env(TESTSUITE_MODULE_TAG_ERR10)\]\} \{ + $errmsg +\}\"" + set linenum 38 +} else { + set custom {} + set linenum 39 +} +set tserr [msg_moderr {'hidden' is a reserved tag name and cannot be set} $errmsg $mp/tag/.modulerc $linenum { } {} {} $custom] +testouterr_cmd sh {load tag/5.0} $ans $tserr +unsetenv_var TESTSUITE_MODULE_TAG_ERR10 # # regular usages