From 8c247f673a9dd7573204ca945ebcd38ce839d6b3 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Mon, 13 Jun 2022 11:06:37 +0200 Subject: [PATCH] code cleanup there is one important change: The keys in Dir2OverlayMap are now the modulefiles root + group name. Example: New '/opt/psi/Tools', old '/opt/psi/Tools/modulefiles' --- Pmodules/libpmodules.bash.in | 4 +- Pmodules/modbuild.in | 6 +- Pmodules/modulecmd.bash.in | 115 +++++------------------------------ 3 files changed, 20 insertions(+), 105 deletions(-) diff --git a/Pmodules/libpmodules.bash.in b/Pmodules/libpmodules.bash.in index f3aa5b5..8a430a5 100644 --- a/Pmodules/libpmodules.bash.in +++ b/Pmodules/libpmodules.bash.in @@ -56,7 +56,7 @@ compute_group_depth () { # (Re-)Scan available groups in given overlays and compute group depth's # # Args: -# $1: array of overlays +# $@: overlay names # scan_groups () { local ol @@ -65,7 +65,7 @@ scan_groups () { local dir for dir in ${mod_root}/*/${PMODULES_MODULEFILES_DIR}; do compute_group_depth "${dir}" - Dir2OverlayMap[${dir}]="${ol}" + Dir2OverlayMap[${dir%/${PMODULES_MODULEFILES_DIR}*}]="${ol}" done done } diff --git a/Pmodules/modbuild.in b/Pmodules/modbuild.in index 995b817..fa1afb6 100755 --- a/Pmodules/modbuild.in +++ b/Pmodules/modbuild.in @@ -498,9 +498,9 @@ build_modules_yaml(){ local idx="$4" _result=$(yq -Ne e ".\"${version}\"[${idx}].overlay" \ "${fname}" 2>/dev/null) - (( $? == 0 )) && return || : + (( $? == 0 )) && return _result=$(yq -Ne e ".overlay" "${fname}" 2>/dev/null) - (( $? == 0 )) && return || : + (( $? == 0 )) && return _result='base' } @@ -542,7 +542,6 @@ build_modules_yaml(){ local -a versions yaml_get_versions versions "${fname}" "${name}/${version}" echo versions=${versions[@]} - echo ${#versions[@]} for v in "${versions[@]}"; do echo version=$v local -i n_variants @@ -581,7 +580,6 @@ build_modules_yaml(){ } -echo "build_modules_yaml()" build_modules() { local variants_file="${BUILDBLOCK_DIR}/files/${BNAME_VARIANTS}" if [[ -n "${variants_file}*.yaml" ]]; then diff --git a/Pmodules/modulecmd.bash.in b/Pmodules/modulecmd.bash.in index 5492772..4e041ba 100644 --- a/Pmodules/modulecmd.bash.in +++ b/Pmodules/modulecmd.bash.in @@ -143,29 +143,6 @@ _exit() { trap '_exit' EXIT -# -# map a moduledir to an overlay -# -# Args: -# $1 upvar for overlay -# $2 moduledir -# -map_moduledir2ol_name() { - local "$1" - local moduledir="${2//+(\/)/\/}" # replace multpile '/' with one - moduledir="${moduledir/%\/}" # remove trailing slash if exist - - if [[ ! -v Dir2OverlayMap[${moduledir}] ]]; then - local ol - for ol in "${UsedOverlays[@]}" 'other'; do - local mod_root="${OverlayInfo[${ol}:mod_root]}" - [[ ${moduledir} == ${mod_root}/* ]] && break - done - Dir2OverlayMap[${moduledir}]="${ol}" - fi - std::upvar $1 "${Dir2OverlayMap[${moduledir}]}" -} - # # get release stage of module # Note: @@ -180,13 +157,10 @@ map_moduledir2ol_name() { # get_release_stage() { local "$1" - local -r moduledir=$2 - local -r modulefile="$2/$3" + local -r dir="$2" + local -r modulefile="${dir}/$3" - local ol_name - map_moduledir2ol_name ol_name "${moduledir}" - - if [[ "${ol_name}" == 'other' ]]; then + if [[ ! -v Dir2OverlayMap[${dir%/${PMODULES_MODULEFILES_DIR}*}] ]]; then std::upvar $1 'stable' return fi @@ -223,15 +197,14 @@ find_overlay () { local "$2" local path="${3//+(\/)/\/}" # replace multpile '/' with one path="${path/%\/}" # remove trailing slash if exist + path="${path%/${PMODULES_MODULEFILES_DIR}*}" + + [[ -v Dir2OverlayMap[${path}] ]] || return 1 local ol="${Dir2OverlayMap[${path}]}" - map_moduledir2ol_name ol "${path}" std::upvar $1 "${ol}" - [[ "${ol}" == 'other' ]] && return 1 - local group="${path#${OverlayInfo[${ol}:mod_root]}/}" - group=${group%%/*} std::upvar $2 "${group}" return 0 } @@ -608,12 +581,10 @@ subcommand_load() { "${CMD}" "${subcommand}" \ "illegal group name" \ "${group}" - #MODULEPATH="" modulepath=() group+="/${PMODULES_MODULEFILES_DIR}" for overlay in "${UsedOverlays[@]}"; do local mod_root="${OverlayInfo[${overlay}:mod_root]}" - #MODULEPATH="${mod_root}/${group}:${MODULEPATH}" modulepath=( "${mod_root}/${group}" "${modulepath[@]}" ) done fi @@ -720,7 +691,6 @@ subcommand_load() { [[ -z ${dir} ]] && continue [[ "${dir: -1}" == "/" ]] || dir+="/" LOADEDMODULES="${LOADEDMODULES//${dir}}" - map_moduledir2ol_name overlay "${dir}" done <<< "${MODULEPATH//:/$'\n'}" g_env_must_be_saved='yes' export_env 'LOADEDMODULES' @@ -935,8 +905,8 @@ get_available_modules() { # - after loading the parent of a hierarchical group # - if we do a search # - if we create a new hierarchical group - local ol - local group + local ol='' + local group='' find_overlay ol group "${dir}" # if no modules are installed in ${dir}, '*' expands to @@ -1482,13 +1452,12 @@ subcommand_use() { std::remove_path MODULEPATH "${dirs[@]}" done fi - + scan_groups "${ol_name}" for group in ${UsedGroups//:/ }; do local dir="${OverlayInfo[${ol_name}:mod_root]}/" dir+="${group}/${PMODULES_MODULEFILES_DIR}" if [[ -d "${dir}" ]]; then std::prepend_path MODULEPATH "${dir}" - Dir2OverlayMap[${dir}]="${ol_name}" fi done @@ -1515,7 +1484,6 @@ subcommand_use() { [[ -d "${dir}" ]] || continue std::prepend_path MODULEPATH "${dir}" - Dir2OverlayMap[${dir}]=${ol_name} [[ "${OverlayInfo[${ol_name}:type]}" == "${ol_replacing}" ]] && break done } @@ -1812,7 +1780,6 @@ init_modulepath() { local dir="${OverlayInfo[${ol}:mod_root]}/${group}/${PMODULES_MODULEFILES_DIR}" if [[ -d "${dir}" ]]; then std::prepend_path MODULEPATH "${dir}" - Dir2OverlayMap[${dir}]="${ol}" fi done done @@ -1853,6 +1820,10 @@ pmodules_init() { done g_env_must_be_saved='yes' } + init_overlay_vars() { + declare -ag UsedOverlays=( 'base' ) + OverlayInfo['base:used']='yes' + } pm::read_config @@ -1964,10 +1935,11 @@ subcommand_purge() { # we may get output like # 'unstable module has been loaded' subcommand_load "${pmodule}" 2> /dev/null + # export_env PMODULES_HOME fi init_modulepath - export_env MODULEPATH PMODULES_HOME + export_env MODULEPATH } ############################################################################## @@ -2057,7 +2029,6 @@ subcommand_clear() { "no arguments allowed" fi pmodules_init - export_env LOADEDMODULES MODULEPATH _LMFILES_ } ############################################################################## @@ -2762,21 +2733,6 @@ if [[ -z "${Subcommands[${subcommand}]}" ]]; then std::die 1 "${CMD}: unknown sub-command -- ${subcommand}" fi -init_overlay_vars() { - declare -ag UsedOverlays=( 'base' ) - OverlayInfo['base:used']='yes' - #declare -Ag Dir2OverlayMap=() - for ol in "${UsedOverlays[@]}"; do - local group - for group in ${UsedGroups//:/ }; do - local dir="${OverlayInfo[${ol}:mod_root]}/${group}/${PMODULES_MODULEFILES_DIR}" - if [[ -d "${dir}" ]]; then - Dir2OverlayMap[${dir}]=${ol} - fi - done - done -} - case ${subcommand} in add ) subcommand='load' @@ -2800,48 +2756,9 @@ if [[ -n ${PMODULES_ENV} ]]; then fi if [[ -z ${Version} ]] || [[ ${Version} != ${PMODULES_VERSION} ]]; then pmodules_init - g_env_must_be_saved='yes' + #g_env_must_be_saved='yes' fi -#if [[ -n ${PMODULES_ENV} ]]; then -# eval "$("${base64}" -d <<< "${PMODULES_ENV}" 2>/dev/null)" -# if [[ -z ${Version} ]] || [[ ${Version} != ${PMODULES_VERSION} ]]; then -# # the Pmodules version changed! -# declare -g Version="${PMODULES_VERSION}" -# pm::read_config -# init_overlay_vars -# # renamed in version 1.0.0rc10 and type changed from -# # associative array to normal array -# if [[ -v UseFlags ]]; then -# declare -a UsedFlags=( "${!UseFlags[@]}" ) -# unset UseFlags -# fi -# if [[ ! -v UsedFlags ]]; then -# declare -a UsedFlags=() -# fi -# if [[ -v UsedReleases ]]; then -# declare -- UsedReleaseStages="${UsedReleases}" -# unset UsedReleases -# fi -# if [[ -v PMODULES_DEFAULT_GROUPS ]]; then -# declare -- DefaultGroups="${PMODULES_DEFAULT_GROUPS}" -# unset PMODULES_DEFAULT_GROUPS -# fi -# if [[ -v PMODULES_DEFINED_RELEASES ]]; then -# declare -- ReleaseStages="${PMODULES_DEFINED_RELEASES}" -# unset PMODULES_DEFINED_RELEASES -# fi -# if [[ -v PMODULES_DEFAULT_RELEASES ]]; then -# declare -- DefaultReleaseStages="${PMODULES_DEFAULT_RELEASES}" -# unset PMODULES_DEFAULT_RELEASES -# fi -# g_env_must_be_saved='yes' -# fi -#else -# pmodules_init -# g_env_must_be_saved='yes' -#fi - if (( ${#GroupDepths[@]} == 0 )); then scan_groups "${UsedOverlays[@]}" g_env_must_be_saved='yes'