Also register unload evaluation attempt

In addition to load evaluation attempt, also register the various unload
evaluation attempt to get a more appropriate warning or error message
regarding the missing requirement during a module load. When these
requirements are unloaded due to a conflict or a dependent unload/reload
mechanism, it seems better not to advise user to load this requirement
(as the dependency management system has unloaded it).
This commit is contained in:
Xavier Delaruelle
2019-04-14 16:07:05 +02:00
parent 2804c89160
commit 986dc31d5b
5 changed files with 31 additions and 23 deletions

View File

@@ -2761,7 +2761,7 @@ proc prereq {args} {
set retisreqlo [eval isModuleEvaluated reqlo $args]
# report message on currently evaluated module message block
if {![set retiseval [eval isModuleEvaluated any $args]] ||\
[currentMsgRecordId] ne [topMsgRecordId]} {
[currentMsgRecordId] ne [topMsgRecordId] || !$retisreqlo} {
# more appropriate msg if an evaluation was attempted or is by-passed
set msg [expr {$retiseval || [getForce] ? [getReqNotLoadedMsg $args]\
@@ -3128,7 +3128,7 @@ proc registerModuleEval {context mod {unset 0}} {
# record module evaluation attempt and corresponding context
proc registerModuleEvalAttempt {context mod} {
set ::g_moduleEvalAttempt($mod) $context
appendNoDupToList ::g_moduleEvalAttempt($mod) $context
}
# are modules passed as argument evaluated in passed context
@@ -7701,6 +7701,9 @@ proc cmdModuleUnload {context match auto force onlyureq onlyndep args} {
set ret 0
pushMode unload
foreach mod $args {
# record evaluation attempt on specified module name
registerModuleEvalAttempt [expr {$context eq {swunload} &&\
![isMsgRecordIdTop] ? {conun} : $context}] $mod
# resolve by also looking at matching loaded module
lassign [getPathToModule $mod {} $match] modfile modname errkind
if {$modfile eq {}} {
@@ -7742,6 +7745,9 @@ proc cmdModuleUnload {context match auto force onlyureq onlyndep args} {
set msgrecid unload-$modname-[getEvalModuleStackDepth]
pushMsgRecordId $msgrecid
# record evaluation attempt on actual module name
registerModuleEvalAttempt $context $modname
pushSettings
if {[set errCode [catch {
# error if unloading module violates a registered prereq

View File

@@ -132,7 +132,7 @@ lappend ans [list setpath LOADEDMODULES "$module_troff"]
lappend ans [list unset testsuite]
lappend ans [list ERR]
# dependent module cannot be reloaded now its prereq has gone missing
set tserr [msg_unload $module_tron $err_trace]\n\n[msg_load $module [err_prereq $module $module_tron]]\n\n[msg_top_switch $module_tron $module_troff {} {} {} {} {} [err_depref $module]]
set tserr [msg_unload $module_tron $err_trace]\n\n[msg_load $module [err_reqmis $module_tron]]\n\n[msg_top_switch $module_tron $module_troff {} {} {} {} {} [err_depref $module]]
testouterr_cmd_re "sh" "switch --auto $module_tron $module_troff" $ans $tserr
set ans [list]

View File

@@ -107,7 +107,7 @@ lappend ans [list unsetpath MODULES_LMCONFLICT]
lappend ans [list unsetpath MODULES_LMNOTUASKED]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "unload de" "load ea"]
testouterr_cmd_re "sh" "switch df ea" $ans [join $tserr "\n"]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df ea {} de {} {} {} [err_swon ea] [err_depref dg]]
testouterr_cmd_re "sh" "switch df ea" $ans [join $tserr "\n"]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df ea {} de {} {} {} [err_swon ea] [err_depref dg]]
set ans [list]
lappend ans [list unsetpath MODULES_LMPREREQ]
@@ -118,7 +118,7 @@ lappend ans [list setpath MODULES_LMCONFLICT "eb&dg"]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "unload de" "load eb"]
# as load is attempted to see if conflict solves, returned error for dg is about missing prereq
testouterr_cmd_re "sh" "switch df eb" $ans [join $tserr "\n"]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df eb {} de {} {} {} [err_depref dg]]
testouterr_cmd_re "sh" "switch df eb" $ans [join $tserr "\n"]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df eb {} de {} {} {} [err_depref dg]]
set ans [list]
lappend ans [list setpath LOADEDMODULES "dh"]
@@ -128,7 +128,7 @@ lappend ans [list unsetpath MODULES_LMCONFLICT]
lappend ans [list unsetpath MODULES_LMNOTUASKED]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "unload de" "load ea"]
testouterr_cmd_re "sh" "switch df ec" $ans [join $tserr "\n"]\n\n[msg_load ec [err_reqmis ea]]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df ec {} de {} {} {} [err_reqlo ea] [err_swon ec] [err_depref dg]]
testouterr_cmd_re "sh" "switch df ec" $ans [join $tserr "\n"]\n\n[msg_load ec [err_reqmis ea]]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df ec {} de {} {} {} [err_reqlo ea] [err_swon ec] [err_depref dg]]
set ans [list]
lappend ans [list setpath MODULES_LMPREREQ "ed&eb"]
@@ -139,7 +139,7 @@ lappend ans [list setpath MODULES_LMCONFLICT "eb&dg"]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "unload de" "load eb" "load ed"]
# as load is attempted to see if conflict solves, returned error for dg is about missing prereq
testouterr_cmd_re "sh" "switch df ed" $ans [join $tserr "\n"]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df ed {} de {} eb {} [err_depref dg]]
testouterr_cmd_re "sh" "switch df ed" $ans [join $tserr "\n"]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df ed {} de {} eb {} [err_depref dg]]
set ans [list]
lappend ans [list unsetpath MODULES_LMPREREQ]
@@ -149,7 +149,7 @@ lappend ans [list setpath LOADEDMODULES "dh:ee"]
lappend ans [list setpath MODULES_LMCONFLICT "ee&de"]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "unload de" "load ee"]
testouterr_cmd_re "sh" "switch df ee" $ans [join $tserr "\n"]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df ee {} de {} {} {} [err_depref dg]]
testouterr_cmd_re "sh" "switch df ee" $ans [join $tserr "\n"]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df ee {} de {} {} {} [err_depref dg]]
set ans [list]
lappend ans [list setpath MODULES_LMNOTUASKED "ee"]
@@ -159,7 +159,7 @@ lappend ans [list setpath _LMFILES_ "$mp/dh:$mp/ee:$mp/ef"]
lappend ans [list setpath LOADEDMODULES "dh:ee:ef"]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "unload de" "load ee" "load ef"]
testouterr_cmd_re "sh" "switch df ef" $ans [join $tserr "\n"]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df ef {} de {} ee {} [err_depref dg]]
testouterr_cmd_re "sh" "switch df ef" $ans [join $tserr "\n"]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df ef {} de {} ee {} [err_depref dg]]
set ans [list]
lappend ans [list setpath LOADEDMODULES "dh"]
@@ -169,7 +169,7 @@ lappend ans [list unsetpath MODULES_LMCONFLICT]
lappend ans [list unsetpath MODULES_LMNOTUASKED]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "unload de"]
testouterr_cmd_re "sh" "switch df eg" $ans [join $tserr "\n"]\n\n[msg_load eg [err_conflict eg dh]]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df eg {} de {} {} {} [err_swon eg] [err_depref dg]]
testouterr_cmd_re "sh" "switch df eg" $ans [join $tserr "\n"]\n\n[msg_load eg [err_conflict eg dh]]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df eg {} de {} {} {} [err_swon eg] [err_depref dg]]
set ans [list]
lappend ans [list unsetpath MODULES_LMNOTUASKED]
@@ -250,7 +250,7 @@ lappend ans [list unsetpath MODULES_LMPREREQ]
lappend ans [list unsetpath MODULES_LMCONFLICT]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "load ea"]
testouterr_cmd_re "sh" "switch df ea" $ans [join $tserr "\n"]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df ea {} {} {} {} {} [err_swon ea] [err_depref dg]]
testouterr_cmd_re "sh" "switch df ea" $ans [join $tserr "\n"]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df ea {} {} {} {} {} [err_swon ea] [err_depref dg]]
set ans [list]
lappend ans [list unsetpath MODULES_LMPREREQ]
@@ -260,7 +260,7 @@ lappend ans [list setpath MODULES_LMCONFLICT "eb&dg"]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "load eb"]
# as load is attempted to see if conflict solves, returned error for dg is about missing prereq
testouterr_cmd_re "sh" "switch df eb" $ans [join $tserr "\n"]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df eb {} {} {} {} {} [err_depref dg]]
testouterr_cmd_re "sh" "switch df eb" $ans [join $tserr "\n"]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df eb {} {} {} {} {} [err_depref dg]]
set ans [list]
lappend ans [list setpath LOADEDMODULES "de:dh"]
@@ -269,7 +269,7 @@ lappend ans [list unsetpath MODULES_LMPREREQ]
lappend ans [list unsetpath MODULES_LMCONFLICT]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "load ea"]
testouterr_cmd_re "sh" "switch df ec" $ans [join $tserr "\n"]\n\n[msg_load ec [err_reqmis ea]]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df ec {} {} {} {} {} [err_reqlo ea] [err_swon ec] [err_depref dg]]
testouterr_cmd_re "sh" "switch df ec" $ans [join $tserr "\n"]\n\n[msg_load ec [err_reqmis ea]]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df ec {} {} {} {} {} [err_reqlo ea] [err_swon ec] [err_depref dg]]
set ans [list]
lappend ans [list setpath MODULES_LMPREREQ "ed&eb"]
@@ -280,7 +280,7 @@ lappend ans [list setpath MODULES_LMCONFLICT "eb&dg"]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df" "load eb" "load ed"]
# as load is attempted to see if conflict solves, returned error for dg is about missing prereq
testouterr_cmd_re "sh" "switch df ed" $ans [join $tserr "\n"]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df ed {} {} {} eb {} [err_depref dg]]
testouterr_cmd_re "sh" "switch df ed" $ans [join $tserr "\n"]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df ed {} {} {} eb {} [err_depref dg]]
set ans [list]
lappend ans [list setpath LOADEDMODULES "de:dh"]
@@ -289,7 +289,7 @@ lappend ans [list unsetpath MODULES_LMPREREQ]
lappend ans [list unsetpath MODULES_LMCONFLICT]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df"]
testouterr_cmd_re "sh" "switch df ee" $ans [join $tserr "\n"]\n\n[msg_load ee [err_conflict ee de]]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df ee {} {} {} {} {} [err_swon ee] [err_depref dg]]
testouterr_cmd_re "sh" "switch df ee" $ans [join $tserr "\n"]\n\n[msg_load ee [err_conflict ee de]]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df ee {} {} {} {} {} [err_swon ee] [err_depref dg]]
set ans [list]
lappend ans [list setpath LOADEDMODULES "de:dh"]
@@ -298,7 +298,7 @@ lappend ans [list unsetpath MODULES_LMPREREQ]
lappend ans [list unsetpath MODULES_LMCONFLICT]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df"]
testouterr_cmd_re "sh" "switch df ef" $ans [join $tserr "\n"]\n\n[msg_load ee [err_conflict ee de]]\n\n[msg_load ef [err_reqmis ee]]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df ef {} {} {} {} {} [err_reqlo ee] [err_swon ef] [err_depref dg]]
testouterr_cmd_re "sh" "switch df ef" $ans [join $tserr "\n"]\n\n[msg_load ee [err_conflict ee de]]\n\n[msg_load ef [err_reqmis ee]]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df ef {} {} {} {} {} [err_reqlo ee] [err_swon ef] [err_depref dg]]
set ans [list]
lappend ans [list setpath LOADEDMODULES "de:dh"]
@@ -307,7 +307,7 @@ lappend ans [list unsetpath MODULES_LMPREREQ]
lappend ans [list unsetpath MODULES_LMCONFLICT]
lappend ans [list ERR]
set tserr [list "unload dg" "unload df"]
testouterr_cmd_re "sh" "switch df eg" $ans [join $tserr "\n"]\n\n[msg_load eg [err_conflict eg dh]]\n\n[msg_load dg [err_prereq dg df]]\n\n[msg_top_switch df eg {} {} {} {} {} [err_swon eg] [err_depref dg]]
testouterr_cmd_re "sh" "switch df eg" $ans [join $tserr "\n"]\n\n[msg_load eg [err_conflict eg dh]]\n\n[msg_load dg [err_reqmis df]]\n\n[msg_top_switch df eg {} {} {} {} {} [err_swon eg] [err_depref dg]]
set ans [list]
lappend ans [list setpath MODULES_LMPREREQ "df&da|db|dc|dd|de"]
@@ -382,7 +382,7 @@ lappend ans [list setpath LOADEDMODULES "h61:h68"]
lappend ans [list setpath MODULES_LMNOTUASKED "h61"]
lappend ans [list ERR]
set tserr [list "unload h62" "unload h60" "load h68"]
testouterr_cmd_re "sh" "switch h60 h68" $ans [join $tserr "\n"]\n\n[msg_load h62 [err_prereq h62 h60]]\n\n[msg_top_switch h60 h68 {} {} {} {} {} [err_depref h62]]
testouterr_cmd_re "sh" "switch h60 h68" $ans [join $tserr "\n"]\n\n[msg_load h62 [err_reqmis h60]]\n\n[msg_top_switch h60 h68 {} {} {} {} {} [err_depref h62]]
# test situation where UReqUn modules impact DepRe list (conflict solving reload)
setenv_loaded_module [list h30 h31 h32 h38] [list "$mp/h30" "$mp/h31" "$mp/h32" "$mp/h38"] [list h30 h31]
@@ -406,7 +406,7 @@ lappend ans [list setpath LOADEDMODULES "h60:h73:h68:h74"]
lappend ans [list setpath _LMFILES_ "$mp/h60:$mp/h73:$mp/h68:$mp/h74"]
lappend ans [list setpath MODULES_LMPREREQ "h74&h73|h62|h63|h71"]
lappend ans [list setpath MODULES_LMNOTUASKED "h60"]
set tserr [list "unload h74" "unload h71" "unload h62" "unload h61" "load h68" \n[msg_load h62 [err_prereq h62 h61]] \n[msg_load h71 [err_reqmis h62]] "\nload h74"]
set tserr [list "unload h74" "unload h71" "unload h62" "unload h61" "load h68" \n[msg_load h62 [err_reqmis h61]] \n[msg_load h71 [err_reqmis h62]] "\nload h74"]
lappend ans [list ERR]
testouterr_cmd_re "sh" "switch h61 h68" $ans [join $tserr "\n"]\n\n[msg_top_switch h61 h68 {} {} {} {} [list h74] [err_depref h62] [err_depref h71]]

View File

@@ -104,7 +104,7 @@ lappend ans [list setpath LOADEDMODULES swb:swc]
lappend ans [list setpath MODULES_LMNOTUASKED swb]
lappend ans [list setpath MODULES_LMCONFLICT swc&swa]
lappend ans [list ERR]
set tserr [list {load swc} {unload swe} {unload swa} {load swb} {load swe} \n[msg_load swe [err_prereq swe swa]] \n[msg_top_load swc [list swa] swb {} [err_depref swe]]]
set tserr [list {load swc} {unload swe} {unload swa} {load swb} {load swe} \n[msg_load swe [err_reqmis swa]] \n[msg_top_load swc [list swa] swb {} [err_depref swe]]]
testouterr_cmd_re sh {load --auto swc} $ans [join $tserr \n]
set tserr [list {load swc} \n[msg_unload swa [err_prerequn swa swe]] \n[msg_load swc [err_swoff swa] [err_conflict swc swa]]]
testouterr_cmd_re sh {load --no-auto swc} ERR [join $tserr \n]
@@ -133,7 +133,7 @@ setenv_loaded_module [list swd swa swe] [list $mp/swd $mp/swa $mp/swe]
setenv_path_var MODULES_LMCONFLICT swd&swb
setenv_path_var MODULES_LMPREREQ swe&swa
set tserr [list {load swc} {unload swe} {unload swa} {load swb} \n[msg_load swb [err_conflict swb swd]]\n {load swe} \n[msg_load swe [err_prereq swe swa]] \n[msg_load swc [err_swon swb] [err_depref swe] [err_reqlo swb]]]
set tserr [list {load swc} {unload swe} {unload swa} {load swb} \n[msg_load swb [err_conflict swb swd]]\n {load swe} \n[msg_load swe [err_reqmis swa]] \n[msg_load swc [err_swon swb] [err_depref swe] [err_reqlo swb]]]
testouterr_cmd_re sh {load --auto swc} ERR [join $tserr \n]
set tserr [list {load swc} \n[msg_unload swa [err_prerequn swa swe]] \n[msg_load swc [err_swoff swa] [err_conflict swc swa]]]
testouterr_cmd_re sh {load --no-auto swc} ERR [join $tserr \n]

View File

@@ -511,7 +511,8 @@ lappend ans [list setpath MODULES_LMNOTUASKED fa]
# conflict is reported twice: by declaring module and conflict-target module as they are both evaluated here
set tserr [msg_load fa [err_conflictf fa faj]]\n\n[msg_top_load faj {} fa {} [err_conflictf faj fa]]
testouterr_cmd_re sh {load --force --auto faj} $ans $tserr
set tserr [msg_load faj [err_prereq faj fa]]
# no load suggestion for fa as its previous unload attempt is detected
set tserr [msg_load faj [err_reqmis fa]]
testouterr_cmd_re sh {load --no-auto faj} ERR $tserr
set ans [list]
lappend ans [list setpath LOADEDMODULES faj]
@@ -525,7 +526,8 @@ setenv_loaded_module [list fa] [list $mp/fa]
setenv_path_var MODULES_LMALTNAME fa&alfa
set tserr [msg_load fa [err_conflict fa faj]]\n\n[msg_load faj [err_reqlo fa]]
testouterr_cmd_re sh {load --auto faj} ERR $tserr
set tserr [msg_load faj [err_prereq faj fa]]
# no load suggestion for fa as its previous unload attempt is detected
set tserr [msg_load faj [err_reqmis fa]]
testouterr_cmd_re sh {load --no-auto faj} ERR $tserr
setenv_loaded_module [list faj] [list $mp/faj]