Skip to content

Commit 7d223d0

Browse files
gsellxdelaruelle
authored andcommitted
ts: add path_entry_reorder configuration option
Signed-off-by: Achim Gsell <achim.gsell@psi.ch>
1 parent 5fd5fd6 commit 7d223d0

8 files changed

Lines changed: 181 additions & 8 deletions

File tree

.github/workflows/linux_tests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ jobs:
132132
tcl85-2:
133133
runs-on: ubuntu-22.04
134134
env:
135-
CONFIGURE_OPTS: --with-tclsh=tclsh8.5 --prefix=/tmp/modules --with-tcl=/usr/local/lib --enable-quarantine-support --enable-silent-shell-debug-support --enable-modulespath --with-pager=more --with-dark-background-colors=hi --with-locked-configs=implicit_default --enable-wa-277 --enable-advanced-version-spec --disable-ml --disable-implicit-requirement --enable-set-shell-startup
135+
CONFIGURE_OPTS: --with-tclsh=tclsh8.5 --prefix=/tmp/modules --with-tcl=/usr/local/lib --enable-quarantine-support --enable-silent-shell-debug-support --enable-modulespath --with-pager=more --with-dark-background-colors=hi --with-locked-configs=implicit_default --enable-wa-277 --enable-advanced-version-spec --disable-ml --disable-implicit-requirement --enable-set-shell-startup --enable-path-entry-reorder
136136
COVERAGE: y
137137
EXTRA_SCRIPT_PRETEST: make install-testinitrc-1 install-testetcrc install-testmodspath
138138
EXTRA_SCRIPT_POSTTEST: make uninstall-testconfig

testsuite/install.00-init/010-environ.exp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,4 +194,7 @@ catch {unset env(MODULERCFILE)}
194194
# setup basic locale for tests
195195
set env(LANG) "C"
196196

197+
# ensure that tests doesn't run with Lmod path order
198+
unsetenv_var MODULES_PATH_ENTRY_REORDER
199+
197200
# vim:set tabstop=3 shiftwidth=3 expandtab autoindent:

testsuite/modulefiles.4/append/2.0

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,24 @@
1-
#%Module
1+
#%Module1.0
2+
3+
##############################################################################
4+
# Modules Revision 3.0
5+
# Providing a flexible user environment
6+
#
7+
# File: append/%M%
8+
# Revision: %I%
9+
# First Edition: 2026/01/08
10+
# Last Mod.: %U%, %G%
11+
#
12+
# Authors: Achim Gsell, achim.gsell@psi.ch
13+
#
14+
# Description: Test appending paths with path_entry_enabled
15+
# Command:
16+
# Sub-Command: append-path
17+
#
18+
# Invocation: load @M@/@V@
19+
# Comment: %C{
20+
# }C%
21+
#
22+
##############################################################################
23+
24+
append-path FOO /test/dir1 /test/dir2 /test/dir3

testsuite/modulefiles.4/append/3.0

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#%Module

testsuite/modules.00-init/010-environ.exp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,9 @@ catch {unset env(MODULES_COLLECTION_TARGET)}
188188
catch {unset env(MODULE_VERSION)}
189189
catch {unset env(MODULE_VERSION_STACK)}
190190

191+
# ensure that tests doesn't run with Lmod path order
192+
unsetenv_var MODULES_PATH_ENTRY_REORDER
193+
191194
set env(MODULERCFILE) "$env(TESTSUITEDIR)/etc/empty"
192195
set ORIG_MODULERCFILE $env(MODULERCFILE)
193196
catch {unset env(MODULESHOME)}

testsuite/modules.50-cmds/040-append.exp

Lines changed: 109 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ testouterr_cmd "sh" "load $module" $ans ""
165165
set module "append/4.0"
166166
set modulefile "$modpath/$module"
167167

168+
setenv_var MODULES_PATH_ENTRY_REORDER 0
168169
unsetenv_path_var FOO
169170
set env(__MODULES_SHARE_BAR) "/path/to/dir1:2"
170171
set env(BAR) "/path/to/dir1:/path/to/dir2:/path/to/dir1"
@@ -179,6 +180,22 @@ lappend ans [list set LOADEDMODULES $module]
179180

180181
testouterr_cmd "sh" "load $module" $ans ""
181182

183+
setenv_var MODULES_PATH_ENTRY_REORDER 1
184+
unsetenv_path_var FOO
185+
set env(__MODULES_SHARE_BAR) "/path/to/dir1:2"
186+
set env(BAR) "/path/to/dir1:/path/to/dir2:/path/to/dir1"
187+
188+
set ans [list]
189+
lappend ans [list set __MODULES_SHARE_FOO "/path/to/dir1:2"]
190+
lappend ans [list set FOO "/path/to/dir1:/path/to/dir2:/path/to/dir1"]
191+
lappend ans [list set __MODULES_SHARE_BAR "/path/to/dir1:3"]
192+
lappend ans [list set BAR "/path/to/dir2:/path/to/dir1"]
193+
lappend ans [list set _LMFILES_ $modulefile]
194+
lappend ans [list set LOADEDMODULES $module]
195+
196+
testouterr_cmd "sh" "load $module" $ans ""
197+
198+
setenv_var MODULES_PATH_ENTRY_REORDER 0
182199
set env(FOO) "/path/to/dir1"
183200

184201
set ans [list]
@@ -191,6 +208,20 @@ lappend ans [list set LOADEDMODULES $module]
191208

192209
testouterr_cmd "sh" "load $module" $ans ""
193210

211+
setenv_var MODULES_PATH_ENTRY_REORDER 1
212+
set env(FOO) "/path/to/dir1"
213+
214+
set ans [list]
215+
lappend ans [list set __MODULES_SHARE_FOO "/path/to/dir1:3"]
216+
lappend ans [list set FOO "/path/to/dir1:/path/to/dir1:/path/to/dir2:/path/to/dir1"]
217+
lappend ans [list set __MODULES_SHARE_BAR "/path/to/dir1:3"]
218+
lappend ans [list set BAR "/path/to/dir2:/path/to/dir1"]
219+
lappend ans [list set _LMFILES_ $modulefile]
220+
lappend ans [list set LOADEDMODULES $module]
221+
222+
testouterr_cmd "sh" "load $module" $ans ""
223+
224+
setenv_var MODULES_PATH_ENTRY_REORDER 0
194225
set env(__MODULES_SHARE_FOO) "/path/to/dir1:2"
195226
set env(FOO) "/path/to/dir1"
196227

@@ -204,6 +235,23 @@ lappend ans [list set LOADEDMODULES $module]
204235

205236
testouterr_cmd "sh" "load $module" $ans ""
206237

238+
setenv_var MODULES_PATH_ENTRY_REORDER 1
239+
set env(__MODULES_SHARE_FOO) "/path/to/dir1:2"
240+
set env(FOO) "/path/to/dir1"
241+
242+
set ans [list]
243+
lappend ans [list set __MODULES_SHARE_FOO "/path/to/dir1:4"]
244+
lappend ans [list set FOO "/path/to/dir1:/path/to/dir1:/path/to/dir2:/path/to/dir1"]
245+
lappend ans [list set __MODULES_SHARE_BAR "/path/to/dir1:3"]
246+
lappend ans [list set BAR "/path/to/dir2:/path/to/dir1"]
247+
lappend ans [list set _LMFILES_ $modulefile]
248+
lappend ans [list set LOADEDMODULES $module]
249+
250+
testouterr_cmd "sh" "load $module" $ans ""
251+
252+
# reset to default config
253+
unset env(MODULES_PATH_ENTRY_REORDER)
254+
207255
# test unload mode on append-path --duplicates
208256
setenv_loaded_module [list $module] [list $modulefile]
209257
set ans [list]
@@ -228,15 +276,16 @@ lappend ans [list unset _LMFILES_]
228276
lappend ans [list unset LOADEDMODULES]
229277
testouterr_cmd sh "unload $module" $ans {}
230278

279+
set module "append/4.1"
280+
set modulefile "$modpath/$module"
281+
282+
setenv_var MODULES_PATH_ENTRY_REORDER 0
231283
setenv_var FOO /path/to/dir1
232284
setenv_var __MODULES_SHARE_FOO /path/to/dir1:2
233285
setenv_var BAR /path/to/dir1:/path/to/dir2:/path/to/dir1
234286
setenv_var __MODULES_SHARE_BAR /path/to/dir1:2
235287
unsetenv_loaded_module
236288

237-
set module "append/4.1"
238-
set modulefile "$modpath/$module"
239-
240289
set ans [list]
241290
lappend ans [list set __MODULES_SHARE_FOO "/path/to/dir1:4"]
242291
lappend ans [list set FOO "/path/to/dir1:/path/to/dir1:/path/to/dir2:/path/to/dir1"]
@@ -247,6 +296,25 @@ lappend ans [list set LOADEDMODULES $module]
247296

248297
testouterr_cmd "sh" "load $module" $ans [msg_load $module "$warn_msgs: --index option has no effect on append-path"]
249298

299+
setenv_var MODULES_PATH_ENTRY_REORDER 1
300+
setenv_var FOO /path/to/dir1
301+
setenv_var __MODULES_SHARE_FOO /path/to/dir1:2
302+
setenv_var BAR /path/to/dir1:/path/to/dir2:/path/to/dir1
303+
setenv_var __MODULES_SHARE_BAR /path/to/dir1:2
304+
unsetenv_loaded_module
305+
306+
set ans [list]
307+
lappend ans [list set __MODULES_SHARE_FOO "/path/to/dir1:4"]
308+
lappend ans [list set FOO "/path/to/dir1:/path/to/dir1:/path/to/dir2:/path/to/dir1"]
309+
lappend ans [list set __MODULES_SHARE_BAR "/path/to/dir1:3"]
310+
lappend ans [list set BAR "/path/to/dir2:/path/to/dir1"]
311+
lappend ans [list set _LMFILES_ $modulefile]
312+
lappend ans [list set LOADEDMODULES $module]
313+
314+
testouterr_cmd "sh" "load $module" $ans [msg_load $module "$warn_msgs: --index option has no effect on append-path"]
315+
316+
# reset to default config
317+
unset env(MODULES_PATH_ENTRY_REORDER)
250318

251319
# test setting a large value in variable. For csh shell family, Modules
252320
# truncates value to avoid going over csh limit (this should be changed in
@@ -297,6 +365,7 @@ testouterr_cmd_re "csh" "load $module" $ans $ts_err
297365
set module "append/6.0"
298366
set modulefile "$modpath/$module"
299367

368+
setenv_var MODULES_PATH_ENTRY_REORDER 0
300369
set env(__MODULES_SHARE_FOO) "/path/to/dir3:2"
301370
set env(FOO) "/path/to/dir1:/path/to/dir4"
302371

@@ -309,6 +378,22 @@ lappend ans [list set LOADEDMODULES $module]
309378
# reference counter is automatically adjusted
310379
testouterr_cmd "sh" "load $module" $ans {}
311380

381+
setenv_var MODULES_PATH_ENTRY_REORDER 1
382+
set env(__MODULES_SHARE_FOO) "/path/to/dir3:2"
383+
set env(FOO) "/path/to/dir1:/path/to/dir4"
384+
385+
set ans [list]
386+
lappend ans [list set __MODULES_SHARE_FOO "/path/to/dir1:2"]
387+
lappend ans [list set FOO "/path/to/dir4:/path/to/dir1:/path/to/dir2"]
388+
lappend ans [list set _LMFILES_ $modulefile]
389+
lappend ans [list set LOADEDMODULES $module]
390+
391+
# reference counter is automatically adjusted
392+
testouterr_cmd "sh" "load $module" $ans {}
393+
394+
# reset to default config
395+
unset env(MODULES_PATH_ENTRY_REORDER)
396+
312397
# test incoherent state on unload mode
313398
setenv_loaded_module $module $modulefile
314399
set ans [list]
@@ -400,13 +485,33 @@ lappend ans [list unset LOADEDMODULES]
400485
testouterr_cmd "sh" "unload $module" $ans {}
401486

402487

488+
#
489+
# test that path entry is not removed if added twice and path_entry_reorder
490+
# is true
491+
#
492+
set module "append/2.0"
493+
set modulefile "$modpath.4/$module"
494+
495+
setenv_var MODULEPATH $modpath.4
496+
setenv_var MODULES_PATH_ENTRY_REORDER 1
497+
setenv_var FOO /test/dir2
498+
unsetenv_var __MODULES_SHARE_FOO
499+
500+
unsetenv_loaded_module
501+
set ans [list]
502+
lappend ans [list set __MODULES_SHARE_FOO "/test/dir2:2"]
503+
lappend ans [list set FOO "/test/dir1:/test/dir2:/test/dir3"]
504+
lappend ans [list set _LMFILES_ $modulefile]
505+
lappend ans [list set LOADEDMODULES $module]
506+
507+
testouterr_cmd "sh" "load $module" $ans ""
508+
403509
#
404510
# --glob option
405511
#
406512

407513
unsetenv_loaded_module
408514
unsetenv_path_var FOO
409-
setenv_var MODULEPATH $modpath.4
410515

411516
set ans [list]
412517
lappend ans [list set FOO /tmp*]

testsuite/modules.50-cmds/050-prepend.exp

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,13 @@ lappend ans [list set LOADEDMODULES $module]
151151
lappend ans [list set testsuite --delim=,:http://foobar.com]
152152
testouterr_cmd_re "sh" "load $module" $ans {}
153153

154-
155154
#
156155
# Try prepending empty string and check reference counter
157156
#
158-
159157
set module "prepend/3.0"
160158
set modulefile "$modpath/$module"
161159

160+
setenv_var MODULES_PATH_ENTRY_REORDER 0
162161
set ans [list]
163162
lappend ans [list set __MODULES_SHARE_FOO ":1"]
164163
lappend ans [list set FOO ""]
@@ -192,6 +191,42 @@ lappend ans [list set LOADEDMODULES "$module2:$module"]
192191

193192
testouterr_cmd_re "sh" "load $module2 $module" $ans ""
194193

194+
setenv_var MODULES_PATH_ENTRY_REORDER 1
195+
set ans [list]
196+
lappend ans [list set __MODULES_SHARE_FOO ":1"]
197+
lappend ans [list set FOO ""]
198+
lappend ans [list set _LMFILES_ $modulefile]
199+
lappend ans [list set LOADEDMODULES $module]
200+
201+
testouterr_cmd "sh" "load $module" $ans ""
202+
203+
# empty var does not always mean empty path entry set, only if a corresponding
204+
# reference counter array entry can be found
205+
set env(FOO) ""
206+
testouterr_cmd "sh" "load $module" $ans ""
207+
208+
unset env(FOO)
209+
set module2 "prepend/3.1"
210+
set modulefile2 "$modpath/$module2"
211+
212+
set ans [list]
213+
lappend ans [list set __MODULES_SHARE_FOO ":2"]
214+
lappend ans [list set FOO "/path/to/dir:"]
215+
lappend ans [list set _LMFILES_ "$modulefile:$modulefile2"]
216+
lappend ans [list set LOADEDMODULES "$module:$module2"]
217+
218+
testouterr_cmd_re "sh" "load $module $module2" $ans ""
219+
220+
set ans [list]
221+
lappend ans [list set __MODULES_SHARE_FOO ":2"]
222+
lappend ans [list set FOO ":/path/to/dir"]
223+
lappend ans [list set _LMFILES_ "$modulefile2:$modulefile"]
224+
lappend ans [list set LOADEDMODULES "$module2:$module"]
225+
226+
testouterr_cmd_re "sh" "load $module2 $module" $ans ""
227+
228+
# reset to default config
229+
unset env(MODULES_PATH_ENTRY_REORDER)
195230

196231
#
197232
# Prepending multiple paths passed as one string

testsuite/modules.70-maint/220-config.exp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ array set configdfl [list\
9393
ml [expr {$install_ml eq {y}}]\
9494
nearly_forbidden_days $install_nearlyforbiddendays\
9595
pager "$install_pagercmd"\
96+
path_entry_reorder [expr {$install_pathentryreorder eq {y}}]\
9697
protected_envvars <undef>\
9798
quarantine_support [expr {$install_quarantinesupport eq {y}}]\
9899
rcfile <undef>\
@@ -158,6 +159,7 @@ array set configvar [list\
158159
ml MODULES_ML\
159160
nearly_forbidden_days MODULES_NEARLY_FORBIDDEN_DAYS\
160161
pager MODULES_PAGER\
162+
path_entry_reorder MODULES_PATH_ENTRY_REORDER\
161163
protected_envvars MODULES_PROTECTED_ENVVARS\
162164
quarantine_support MODULES_QUARANTINE_SUPPORT\
163165
rcfile MODULERCFILE\
@@ -213,6 +215,7 @@ array set configvalid [list\
213215
mcookie_version_check {0 1}\
214216
ml {0 1}\
215217
nearly_forbidden_days {0 365}\
218+
path_entry_reorder {0 1}\
216219
quarantine_support {0 1}\
217220
redirect_output {0 1}\
218221
require_via {0 1}\

0 commit comments

Comments
 (0)