Skip to content

Commit 5d85b0b

Browse files
committed
Correctly match loaded modules against trailing / spec
Match loaded modules when specified as requirement with a trailing slash character after module name (e.g., foo/). Closes #640 Signed-off-by: Xavier Delaruelle <xavier.delaruelle@cea.fr>
1 parent b656b6c commit 5d85b0b

4 files changed

Lines changed: 69 additions & 16 deletions

File tree

NEWS.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ Modules 5.7.0 (not yet released)
106106
* Enable lexical binding in Emacs addon file. (contribution from Peter Oliver)
107107
* Script: update :command:`mt` utility to analyze test suite log file when
108108
test suite run is aborted.
109+
* Correctly match loaded modules specified as requirement with a trailing
110+
``/`` character after module name. (fix issue #640)
109111

110112

111113
.. _5.6 release notes:

tcl/modspec.tcl

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -622,11 +622,15 @@ proc modEqProc {pattern mod {test equal} {trspec 1} {ismodlo 0} {vrcmp 0}\
622622
set pmod $pattern
623623
}
624624
# trim dup trailing / char and adapt pmod suffix if it starts with /
625+
set endwslash 0
625626
if {[string index $pmod end] eq {/}} {
626-
set pmod [string trimright $pmod /]/
627-
set endwslash 1
628-
} else {
629-
set endwslash 0
627+
# trailing / will be automatically added in the eqstart tests
628+
if {$test eq {eqstart}} {
629+
set pmod [string trimright $pmod /]
630+
} else {
631+
set pmod [string trimright $pmod /]/
632+
set endwslash 1
633+
}
630634
}
631635
# get alternative names if mod is loading(1) or loaded(2)
632636
set altlist [switch -- $ismodlo {
@@ -759,11 +763,14 @@ proc modEqProcIcase {pattern mod {test equal} {trspec 1} {ismodlo 0} {vrcmp\
759763
} else {
760764
set pmod $pattern
761765
}
766+
set endwslash 0
762767
if {[string index $pmod end] eq {/}} {
763-
set pmod [string trimright $pmod /]/
764-
set endwslash 1
765-
} else {
766-
set endwslash 0
768+
if {$test eq {eqstart}} {
769+
set pmod [string trimright $pmod /]
770+
} else {
771+
set pmod [string trimright $pmod /]/
772+
set endwslash 1
773+
}
767774
}
768775
set altlist [switch -- $ismodlo {
769776
7 {getLoadedAltname $mod {alias}}
@@ -888,11 +895,14 @@ proc modEqProcExtdfl {pattern mod {test equal} {trspec 1} {ismodlo 0} {vrcmp\
888895
} else {
889896
set pmod $pattern
890897
}
898+
set endwslash 0
891899
if {[string index $pmod end] eq {/}} {
892-
set pmod [string trimright $pmod /]/
893-
set endwslash 1
894-
} else {
895-
set endwslash 0
900+
if {$test eq {eqstart}} {
901+
set pmod [string trimright $pmod /]
902+
} else {
903+
set pmod [string trimright $pmod /]/
904+
set endwslash 1
905+
}
896906
}
897907
set altlist [switch -- $ismodlo {
898908
7 {getLoadedAltname $mod {alias}}
@@ -1033,11 +1043,14 @@ proc modEqProcIcaseExtdfl {pattern mod {test equal} {trspec 1} {ismodlo 0}\
10331043
} else {
10341044
set pmod $pattern
10351045
}
1046+
set endwslash 0
10361047
if {[string index $pmod end] eq {/}} {
1037-
set pmod [string trimright $pmod /]/
1038-
set endwslash 1
1039-
} else {
1040-
set endwslash 0
1048+
if {$test eq {eqstart}} {
1049+
set pmod [string trimright $pmod /]
1050+
} else {
1051+
set pmod [string trimright $pmod /]/
1052+
set endwslash 1
1053+
}
10411054
}
10421055
set altlist [switch -- $ismodlo {
10431056
7 {getLoadedAltname $mod {alias}}

testsuite/modulefiles.4/foo/1.0

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,13 @@ if {[info exists env(TESTSUITE_MODULEPATH_OPT)]} {
7373
}
7474
}
7575
}
76+
if {[info exists env(TESTSUITE_PREREQ)]} {
77+
switch -- $env(TESTSUITE_PREREQ) {
78+
prereq_slash {
79+
prereq bar/
80+
}
81+
prereq_at {
82+
prereq bar@
83+
}
84+
}
85+
}

testsuite/modules.50-cmds/121-prereq-module.exp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,34 @@ lappend ans [list set LOADEDMODULES "$module_troff:$module_tron:$module"]
136136
lappend ans [list set testsuite yes]
137137
testouterr_cmd_re "sh" "switch --auto $module_set $module_tron" $ans [msg_load $module_tron $err_trace]\n\n[msg_top_switch $module_set $module_tron {} {} {} {} $module]
138138

139+
140+
# test prereq command with module spec with trailng slash/at character
141+
unsetenv_loaded_module
142+
unsetenv_var __MODULES_LMPREREQ
143+
setenv_var MODULEPATH $modpath.4
144+
setenv_var TESTSUITE_PREREQ prereq_slash
145+
setenv_var MODULES_ADVANCED_VERSION_SPEC 1
146+
setenv_var MODULES_IMPLICIT_DEFAULT 1
147+
148+
set ans [list]
149+
lappend ans [list set __MODULES_LMALTNAME bar/2&as|bar/default&as|bar/latest]
150+
lappend ans [list set __MODULES_LMPREREQ foo/1.0&bar/]
151+
lappend ans [list set _LMFILES_ $modpath.4/bar/2:$modpath.4/foo/1.0]
152+
lappend ans [list set LOADEDMODULES bar/2:foo/1.0]
153+
lappend ans [list set __MODULES_LMTAG bar/2&auto-loaded]
154+
set tserr [msg_top_load foo/1.0 {} bar/2 {}]
155+
testouterr_cmd sh {load --auto foo/1.0} $ans $tserr
156+
157+
setenv_var TESTSUITE_PREREQ prereq_at
158+
set ans [list]
159+
lappend ans [list set __MODULES_LMALTNAME bar/2&as|bar/default&as|bar/latest]
160+
lappend ans [list set __MODULES_LMPREREQ foo/1.0&bar@]
161+
lappend ans [list set _LMFILES_ $modpath.4/bar/2:$modpath.4/foo/1.0]
162+
lappend ans [list set LOADEDMODULES bar/2:foo/1.0]
163+
lappend ans [list set __MODULES_LMTAG bar/2&auto-loaded]
164+
testouterr_cmd sh {load --auto foo/1.0} $ans $tserr
165+
166+
139167
#
140168
# Cleanup
141169
#

0 commit comments

Comments
 (0)