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
+5 -4
View File
@@ -114,6 +114,7 @@ declare -A OverlayConfigKeys=(
['default_relstage']='unstable'
['layout']='Pmodules'
['has_additional_modulepaths']='false'
['groups']=''
)
declare -A OverlayPathConfigKeys=(
@@ -382,13 +383,13 @@ pm::read_config(){
esac
OverlayInfo[${ol_name}:${key}]="${value}"
;;
conflicts | excludes )
conflicts | excludes | groups)
yml::get_seq value yaml_input "${node}.${key}" '!!seq'
local -a tmp_array=()
readarray -t tmp_array <<<${value}
local excludes=''
printf -v excludes "%s:" "${tmp_array[@]}"
OverlayInfo[${ol_name}:${key}]=$(${envsubst} <<<"${excludes%:}" )
local -- tmp_str=''
printf -v tmp_str "%s:" "${tmp_array[@]}"
OverlayInfo[${ol_name}:${key}]=$(${envsubst} <<<"${tmp_str%:}" )
;;
path_config )
yml::get_value value yaml_input "${node}.${key}" '!!seq'
+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: