modulecmd: regex can now be used in overlay excludes

This commit is contained in:
2024-09-09 10:31:32 +02:00
parent 340ddd0699
commit 946610658f
+17 -12
View File
@@ -51,7 +51,7 @@ declare -- ReleaseStages=':unstable:stable:deprecated:'
# set releases which should be available after initialization # set releases which should be available after initialization
declare -- DefaultReleaseStages='stable' declare -- DefaultReleaseStages='stable'
declare -A OverlayExcludes=() declare -- OverlayExcludes=''
declare -a UsedOverlays=() declare -a UsedOverlays=()
declare -- PmFiles='' declare -- PmFiles=''
declare -- ModulePathAppend='' declare -- ModulePathAppend=''
@@ -1214,8 +1214,8 @@ get_available_modules() {
# its sub-directories # its sub-directories
local mod='' # module_name/module_version local mod='' # module_name/module_version
while read -r mod; do while read -r mod; do
[[ "${mod}" =~ ${OverlayExcludes} ]] && continue
local name="${mod%/*}" local name="${mod%/*}"
[[ -v OverlayExcludes[${name}] ]] && continue
local add='no' local add='no'
if [[ -n "${ol}" && "${ol}" != 'none' ]]; then if [[ -n "${ol}" && "${ol}" != 'none' ]]; then
# module is in an overlay # module is in an overlay
@@ -1794,13 +1794,15 @@ subcommand_use() {
UsedOverlays=( "${ol_name}" "${UsedOverlays[@]}" ) UsedOverlays=( "${ol_name}" "${UsedOverlays[@]}" )
OverlayInfo[${ol_name}:used]='yes' OverlayInfo[${ol_name}:used]='yes'
local excludes=() local -a excludes=()
local item
IFS=':' read -r -a excludes <<< "${OverlayInfo[${ol_name}:excludes]}" IFS=':' read -r -a excludes <<< "${OverlayInfo[${ol_name}:excludes]}"
local -- item=''
for item in "${excludes[@]}"; do for item in "${excludes[@]}"; do
OverlayExcludes[${item}]=1 OverlayExcludes+="${item}|"
done done
if [[ -n "${OverlayExcludes}" ]]; then
OverlayExcludes="${OverlayExcludes:0: -1}"
fi
scan_groups "${UsedOverlays[@]}" scan_groups "${UsedOverlays[@]}"
} }
@@ -1967,17 +1969,19 @@ subcommand_unuse() {
# Note: # Note:
# A module might be excluded in multiple overlays. So, we cannot # A module might be excluded in multiple overlays. So, we cannot
# just remove the excludes from the overlay to unuse. # just remove the excludes from the overlay to unuse.
local excludes=() OverlayExcludes=''
OverlayExcludes=() local -- ol=''
local ol local -a excludes=()
local item local -- item=''
for ol in "${UsedOverlays[@]}"; do for ol in "${UsedOverlays[@]}"; do
IFS=':' read -r -a excludes <<< "${OverlayInfo[${ol}:excludes]}" IFS=':' read -r -a excludes <<< "${OverlayInfo[${ol}:excludes]}"
for item in "${excludes[@]}"; do for item in "${excludes[@]}"; do
OverlayExcludes[${item}]=1 OverlayExcludes+="${item}|"
done done
done done
if [[ -n "${OverlayExcludes}" ]]; then
OverlayExcludes="${OverlayExcludes:0: -1}"
fi
# remove additional directories added by overlay # remove additional directories added by overlay
if [[ -v OverlayInfo[${ol_name}:modulepath] && \ if [[ -v OverlayInfo[${ol_name}:modulepath] && \
-n "${OverlayInfo[${ol_name}:modulepath]}" ]]; then -n "${OverlayInfo[${ol_name}:modulepath]}" ]]; then
@@ -2169,6 +2173,7 @@ pmodules_init() {
init_overlay_vars() { init_overlay_vars() {
declare -ag UsedOverlays=( 'base' ) declare -ag UsedOverlays=( 'base' )
OverlayInfo['base:used']='yes' OverlayInfo['base:used']='yes'
declare -g OverlayExcludes=''
} }
init_manpath() { init_manpath() {