modulecmd: use/unuse group while loading an overlay

This commit is contained in:
2025-03-14 16:57:40 +01:00
parent 65b037c1c4
commit 10ffe41db1
2 changed files with 42 additions and 4 deletions
+37
View File
@@ -1899,6 +1899,26 @@ subcommand_use() {
MaskedGroups[${group}]="${ol_name}:${MaskedGroups[${group}]}"
done
fi
if [[ -n "${OverlayInfo[${ol_name}:groups]}" ]]; then
local -- grp_changes=':'
local -a groups=()
IFS=':' read -r -a groups <<< "${OverlayInfo[${ol_name}:groups]}"
local -- group=''
for group in "${groups[@]}"; do
if [[ "${group:0:1}" == '~' ]]; then
if [[ ":${UsedGroups}:" == *:${group:1}:* ]]; then
subcommand_unuse "${group:1}"
grp_changes+="${group}:"
fi
else
if [[ ":${UsedGroups}:" != *:${group}:* ]]; then
use_group "${group}"
grp_changes+="${group}:"
fi
fi
done
OverlayInfo[${ol_name}:grp_changes]="${grp_changes:0: -1}"
fi
scan_groups "${ol_name}"
for group in ${UsedGroups//:/ }; do
local dir="${OverlayInfo[${ol_name}:modulefiles_root]}/"
@@ -2102,6 +2122,23 @@ subcommand_unuse() {
std::prepend_path MODULEPATH "${dir}"
done
fi
if [[ -n "${OverlayInfo[${ol_name}:groups]}" ]]; then
local -a groups=()
IFS=':' read -r -a groups <<< "${OverlayInfo[${ol_name}:grp_changes]}"
local -- group=''
for group in "${groups[@]}"; do
if [[ "${group:0:1}" == '~' ]]; then
if [[ ":${UsedGroups}:" != *:${group:1}:* ]]; then
subcommand_use "${group:1}"
fi
else
if [[ ":${UsedGroups}:" == *:${group}:* ]]; then
unuse_group "${group}"
fi
fi
done
OverlayInfo[${ol_name}:grp_changes]=':'
fi
# rebuild exclude list.
# Note: