Pmodules/modulecmd.bash.in:

- subcommand_avail(), subcommand_search(): variables used to handle
  options renamed to 'opt_xyz'
- subcommand_search(): option to output variants added
- --debug option added
This commit is contained in:
2016-06-03 17:47:11 +02:00
parent d915f07cbb
commit 70b7a4161c
+110 -36
View File
@@ -9,7 +9,7 @@ unset CDPATH
declare -r CMD='module'
declare -r mydir=$(cd $(dirname "$0") && pwd)
declare -r prefix=$(dirname "${mydir}")
declare prefix=$(dirname "${mydir}")
declare -r bindir="${prefix}/bin"
declare -r libdir="${prefix}/lib"
declare -r libexecdir="${prefix}/libexec"
@@ -1056,11 +1056,11 @@ subcommand_avail() {
local pattern=()
local output_function=''
local opts=''
local use_releases="${UsedReleases}"
local opt_use_releases="${UsedReleases}"
while (($# > 0)); do
case $1 in
-a | --all | --all-releases )
use_releases="${PMODULES_DEFINED_RELEASES}"
opt_use_releases="${PMODULES_DEFINED_RELEASES}"
;;
-h | --human )
[[ -z ${opts} ]] || \
@@ -1104,7 +1104,7 @@ subcommand_avail() {
IFS=${saved_IFS}
for string in "${pattern[@]}"; do
for dir in "${modulepath[@]}"; do
mods=( $( get_available_modules "${dir}" "${string}" "${use_releases}" ) )
mods=( $( get_available_modules "${dir}" "${string}" "${opt_use_releases}" ) )
[[ ${#mods[@]} == 0 ]] && continue
${output_function}
@@ -1421,9 +1421,10 @@ subcommand_search() {
local modules=()
local with_modules='//'
local src_prefix=''
local _print_header='yes'
local _print_modulefiles='no'
local use_releases=':'
local opt_print_header='yes'
local opt_print_modulefiles='no'
local opt_print_variants='no'
local opt_use_releases=':'
local -r fmt="%-20s %-10s %-12s %-s\n"
# no args
@@ -1434,18 +1435,97 @@ subcommand_search() {
printf '\n' 1>&2
}
# args:
# $1: module name pattern
#
# output result of search
# Args:
# $1: tmp file
#
# variables used from enclosing function:
# opt_print_header
# opt_print_modulefiles
# opt_print_variants
# with_modules
#
print_result() {
local -r tmpfile=$1
[[ "${opt_print_header}" == "yes" ]] && print_header
if [[ "${opt_print_modulefiles}" == "yes" ]]; then
while read -a line; do
# group first
local out="${line[2]}/"
# add directory of modulefiles
out+="${PMODULES_MODULEFILES_DIR}/"
for d in "${line[@]:3}"; do
out+="$d/"
done
out+="${line[0]}"
std::info "${out}"
done < <(sort -k 1,1 -k 4,4 -k 5,5 "${tmpfile}" | awk "${with_modules}")
elif [[ "${opt_print_variants}" == "yes" ]]; then
while read -a toks; do
unset deps
# build prefix for this module
local prefix="${PMODULES_ROOT}/${toks[2]}/${toks[0]}/"
for ((i=${#toks[@]}-1; i>=3; i--)); do
prefix+="${toks[i]}/"
done
# read dependencies
local -a ordered_deps=()
local d
local -A deps
if [[ -r "${prefix}/.build_dependencies" ]]; then
readarray -t ordered_deps < "${prefix}/.build_dependencies"
for d in "${ordered_deps[@]}"; do
[[ -z $d ]] && continue
deps[$d]='b:'
done
fi
if [[ -r "${prefix}/.dependencies" ]]; then
local -a rdeps
readarray -t rdeps < "${prefix}/.dependencies"
for d in "${rdeps[@]}"; do
[[ -z $d ]] && continue
if [[ ${deps[$d]+isset} ]]; then
# is a build- and run-time dependency
deps[$d]=''
else
# is a run-time dependency only
ordered_deps+=( "$d" )
deps[$d]='r:'
fi
done
fi
local dependecies=''
for d in "${ordered_deps[@]}"; do
[[ -z $d ]] && continue
dependecies+="${deps[$d]}$d "
done
printf "%-20s %-10s %-s\n" "${toks[0]}" "${toks[1]}" "${dependecies}" 1>&2
done < <(sort -k 1,1 -k 4,4 -k 5,5 "${tmpfile}" | awk "${with_modules}")
else
sort -k 1,1 -k 4,4 -k 5,5 "${tmpfile}" | awk "${with_modules}" 1>&2
fi
}
#
# search modules
# Args:
# $1: module name pattern
#
# Variables used from enclosing function
# :FIXME:
#
search () {
local -r module=$1
# we must write temporary results to a file for sorting
# write results to a temporary file for later processing
local -r tmpfile=$( mktemp /tmp/$(basename $0).XXXXXX ) \
|| std::die 1 "Oops: unable to create tmp file!"
local _group
# loop over all groups
for _group in "${Groups[@]}"; do
# loop over all directories which can be added to
# MODULEPATH inside current group
local depth=${HierarchyDepths[${_group}]}
# get all potential directories of group with module-files
local mpaths=( $(find \
"${src_prefix}/${_group}/modulefiles" \
-type d \
@@ -1468,7 +1548,7 @@ subcommand_search() {
local mods=( $( get_available_modules \
"${mpath}" \
"${module}" \
"${use_releases}" ) )
"${opt_use_releases}" ) )
[[ ${#mods[@]} == 0 ]] && continue
for (( i=0; i<${#mods[@]}; i+=2 )); do
printf "${fmt}" ${mods[i]} "${mods[i+1]}" \
@@ -1476,21 +1556,7 @@ subcommand_search() {
done
done
done
if [[ "${_print_modulefiles}" == "no" ]]; then
sort -k 1,1 -k 4,4 -k 5,5 "${tmpfile}" | awk "${with_modules}" 1>&2
else
while read -a line; do
# group first
local out="${line[2]}/"
# add directory of modulefiles
out+="${PMODULES_MODULEFILES_DIR}/"
for d in "${line[@]:3}"; do
out+="$d/"
done
out+="${line[0]}"
std::info "${out}"
done < <(sort -k 1,1 -k 4,4 -k 5,5 "${tmpfile}" | awk "${with_modules}")
fi
print_result "${tmpfile}"
rm -f "${tmpfile}"
}
@@ -1502,22 +1568,23 @@ subcommand_search() {
-l with: \
-l all-releases \
-l src: \
-l print-variants \
-- "$@") || subcommand_help_${0##*_}
eval set -- "${opts}"
while (( $# > 0 )); do
case $1 in
--no-header )
_print_header='no'
opt_print_header='no'
;;
--print-modulefiles )
_print_modulefiles='yes'
_print_header='no'
opt_print_modulefiles='yes'
opt_print_header='no'
;;
--release )
is_release "$2" || \
std::die 1 "${CMD} search: illegal release name -- $2"
use_releases+="$2:"
opt_use_releases+="$2:"
shift
;;
--with )
@@ -1528,14 +1595,19 @@ subcommand_search() {
shift
;;
-a | --all-releases )
use_releases="${PMODULES_DEFINED_RELEASES}"
opt_use_releases="${PMODULES_DEFINED_RELEASES}"
;;
--src )
src_prefix=$2
pmodules::check_directories "${src_prefix}"
shift
;;
--print-variants )
opt_print_variants='yes'
opt_print_header='no'
opt_use_releases="${PMODULES_DEFINED_RELEASES}"
:
;;
-\? | -h | -H | --help )
usage
;;
@@ -1551,11 +1623,10 @@ subcommand_search() {
src_prefix="${PMODULES_ROOT}"
fi
if [[ "${use_releases}" == ":" ]]; then
use_releases=":${UsedReleases}:"
if [[ "${opt_use_releases}" == ":" ]]; then
opt_use_releases=":${UsedReleases}:"
fi
[[ "${_print_header}" == "yes" ]] && print_header
if [[ ${#modules[@]} == 0 ]]; then
modules+=( '' )
fi
@@ -1700,6 +1771,9 @@ while (( $# > 0 )); do
print_version
std::die 1
;;
--debug )
set -x
;;
-* )
opts+=( "$1" )
;;