libpmodules.bash: functions added

The following function have been added:
- get_overlay_info()
- get_available_overlays()
This commit is contained in:
2021-12-16 18:51:19 +01:00
parent ddbbdf9be8
commit 854a6dc3fc
+106
View File
@@ -59,6 +59,112 @@ scan_groups () {
done
}
get_overlay_info(){
# Args:
# $1 [in] overlay name or directory plus optional type
# $2 [upvar] overlay name
# $2 [upvar] overlay type
# $3 [upvar] overlay root directory
# $4 [upvar] overlay prefix for software installation
#
local name_or_dir="${1%:*}"
[[ -d ${name_or_dir} ]] && name_or_dir=$(cd "${name_or_dir}" && pwd -L)
local config_files=()
if [[ -v PMODULES_OVERLAYS_CONF ]]; then
config_files+=("${PMODULES_OVERLAYS_CONF}")
fi
config_files+=("${HOME}/.Pmodules/overlays.conf")
config_files+=("${PMODULES_ROOT}/config/overlays.conf")
for config_file in "${config_files[@]}"; do
[[ -r "${config_file}" ]] || continue
local toks=()
local -i lino=0
while read -a toks; do
(( lino+=1 ))
[[ -n "${toks[0]}" ]] || continue
[[ ${toks[0]} == \#* ]] && continue
(( ${#toks[@]} < 2 )) && \
std::warn "%s - %s" \
"Skipping malformed line ${lino} in configuration file" \
"${config_file}"
local _name="${toks[0]%:*}"
if [[ "${toks[0]%:*}" == "${name_or_dir}" ]] \
|| [[ "${toks[1]}" == "${name_or_dir}" ]]; then
# take type from
# 1. $1
# 2. configuration file
# 3. use default type
local _type="${ol_normal}"
if [[ "$1" == *:* ]]; then
_type="${1##*:}"
elif [[ "${toks[0]}" == *:* ]]; then
_type="${toks[0]##*:}"
fi
[[ -n "$2" ]] && std::upvar "$2" "${toks[0]%:*}"
[[ -n "$3" ]] && std::upvar "$3" "${_type}"
[[ -n "$4" ]] && std::upvar "$4" "${toks[1]}"
if [[ -n "$5" ]]; then
if [[ -n "${toks[2]}" ]]; then
std::upvar "$5" "${toks[2]}"
else
std::upvar "$5" "${toks[1]}"
fi
fi
return 0
fi
done < "${config_file}"
done
return 1
}
get_available_overlays(){
# Args:
# $1 [upvar] result
#
local name_or_dir="${1%:*}"
[[ -d ${name_or_dir} ]] && name_or_dir=$(cd "${name_or_dir}" && pwd -L)
local config_files=()
if [[ -v PMODULES_OVERLAYS_CONF ]]; then
config_files+=("${PMODULES_OVERLAYS_CONF}")
fi
config_files+=("${HOME}/.Pmodules/overlays.conf")
config_files+=("${PMODULES_ROOT}/config/overlays.conf")
local -a result=()
for config_file in "${config_files[@]}"; do
[[ -r "${config_file}" ]] || continue
local toks=()
local -i lino=0
while read -a toks; do
(( lino++ ))
[[ -n "${toks[0]}" ]] || continue
[[ ${toks[0]} == \#* ]] && continue
(( ${#toks[@]} < 2 )) && \
std::warn "%s - %s" \
"Skipping malformed line ${lino} in configuration file" \
"${config_file}"
local _name="${toks[0]%:*}"
# take type from
# 1. $1
# 2. configuration file
# 3. use default type
local _type="${ol_normal}"
if [[ "$1" == *:* ]]; then
_type="${1##*:}"
elif [[ "${toks[0]}" == *:* ]]; then
_type="${toks[0]##*:}"
fi
local _ol_dir="${toks[1]}"
local _ol_install_dir="${toks[2]}"
_ol_install_dir="${_ol_install_dir:-${toks[1]}}"
result+=( "${_name} ${_type} ${_ol_dir} ${_ol_install_dir}")
done < "${config_file}"
done
std::upvar "$1" "${result[@]}"
}
# Local Variables:
# mode: sh
# sh-basic-offset: 8