From 9f97c0d5e7215d2be41fb4694afbca7b6b0b87c5 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Mon, 4 Aug 2025 17:03:05 +0200 Subject: [PATCH] modulecmd: bugfix in keeping track of used overlay --- Pmodules/libmodules.tcl | 17 +++++++++-------- Pmodules/modulecmd.bash.in | 10 +++++----- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/Pmodules/libmodules.tcl b/Pmodules/libmodules.tcl index 0019b76..d772444 100644 --- a/Pmodules/libmodules.tcl +++ b/Pmodules/libmodules.tcl @@ -51,12 +51,13 @@ proc _pmodules_parse_pmodules_env { } { array set ::OverlayInfo $tmp_olinfo } UsedOverlays { - array set tmp [regsub -all {[]=[]} $value " "] - set ::UsedOverlays {} - set l [lsort [array names tmp]] - foreach k $l { - lappend ::UsedOverlays $tmp($k) - } + # convert a string like + # [0]="Alps_A100" [1]="PSI" [2]="Alps" [3]="merlin" [4]="base" + # to + # Alps_A100 PSI Alps merlin base + set tmpstr [regsub -all {\[[0-9]+\]=} $value ""] + set tmpstr [regsub -all {\"} $tmpstr ""] + set ::UsedOverlays [split $tmpstr] } UsedGroups { set ::UsedGroups $value @@ -93,8 +94,9 @@ proc module-addgroup { group } { break } } - foreach overlay [lreverse_n $overlays_to_add 1] { + foreach overlay [lreverse $overlays_to_add] { debug "overlay=$overlay" + debug "modulefiles_root=$::OverlayInfo($overlay:modulefiles_root)" debug "group=$group" debug "::variant=$::variant" set dir [file join \ @@ -102,7 +104,6 @@ proc module-addgroup { group } { $group \ $::MODULEFILES_DIR \ {*}$::variant] - debug "dir=$dir" if { [file isdirectory $dir] } { debug "prepend $dir to MODULEPATH " prepend-path MODULEPATH $dir diff --git a/Pmodules/modulecmd.bash.in b/Pmodules/modulecmd.bash.in index 206c14b..90175fe 100644 --- a/Pmodules/modulecmd.bash.in +++ b/Pmodules/modulecmd.bash.in @@ -2481,9 +2481,7 @@ subcommand_purge() { # - used groups local -- saved_groups="${UsedGroups}" # - used overlays - local -- saved_overlays='' - printf -v saved_overlays "%s:" "${UsedOverlays[@]}" - saved_overlays="${saved_overlays%:}" + local -a saved_overlays=( "${UsedOverlays[@]}" ) # - additional directories in MODULEPATH local -- item='' local -- group='' @@ -2499,12 +2497,14 @@ subcommand_purge() { pmodules_setup init # - restore + # release stages IFS=':' read -r -a items <<<"${saved_relstages}" for item in "${items[@]}"; do subcommand_use "${item}" done - IFS=':' read -r -a items <<<"${saved_overlays}" - for item in "${items[@]}"; do + # overlays + for (( i=${#saved_overlays[@]}-1; i>=0; i-- )); do + item="${saved_overlays[i]}" [[ -v OverlayInfo[${item}:used] ]] || continue subcommand_use "${item}" done