Merge branch '37-switch-command-does-not-work' into 'master'

Resolve "switch command does not work"

Closes #37

See merge request Pmodules/src!8
This commit is contained in:
2019-05-16 16:55:40 +02:00
3 changed files with 41 additions and 109 deletions
+1 -41
View File
@@ -42,50 +42,10 @@ PATH="${PMODULES_HOME}/bin:$PATH"
#
module() {
unset BASH_ENV
local -r modulecmd="${PMODULES_HOME}/bin/modulecmd"
local -a args=()
local -a modulecmd_opts=()
local -a subcmd_opts=()
while (( $# > 0 )); do
case $1 in
-* )
modulecmd_opts+=( $1 )
shift
;;
* )
break
;;
esac
done
while (( $# > 0 )); do
case $1 in
-* )
subcmd_opts+=( $1 )
;;
[/~a-zA-Z]* )
args+=( $1 )
;;
esac
shift
done
[[ ${#args[@]} == 0 ]] && args+=( 'help' )
[[ ${#args[@]} == 1 ]] && args+=( '--' )
# Loop over all modules to load.
# Note: We have to eval here, otherwise we cannot do something like
# $ module load gcc/5.2.0 openmpi/1.8.8 hdf5/1.8.15
local -i i=1
for (( i=1; i < ${#args[@]}; i++ )); do
eval $( "${modulecmd}" bash "${modulecmd_opts[@]}" "${args[0]}" \
"${subcmd_opts[@]}" "${args[i]}" )
done
eval $("${PMODULES_HOME}/bin/modulecmd" bash "$@")
}
export -f module
# Local Variables:
# mode: sh
# sh-basic-offset: 8
+6 -64
View File
@@ -28,7 +28,8 @@ proc module-addgroup { group } {
global version
debug "called with arg $group"
debug "mode=[module-info mode]"
set GROUP [string toupper $group]
regsub -- "-" ${GROUP} "_" GROUP
setenv ${GROUP} $name
@@ -38,8 +39,6 @@ proc module-addgroup { group } {
set ::${group}_version $version
if { [module-info mode load] } {
debug "mode is load"
prepend-path MODULEPATH [file join \
$::PmodulesRoot \
$group \
@@ -50,22 +49,22 @@ proc module-addgroup { group } {
debug "mode=load: new UsedGroups=$env(UsedGroups)"
} elseif { [module-info mode remove] } {
set GROUP [string toupper $group]
debug "remove hierarchical group '${GROUP}'"
debug "mode=remove: hierarchical group '${GROUP}'"
if { [info exists ::env(PMODULES_LOADED_${GROUP})] } {
debug "unloading orphan modules"
debug "mode=remove: unloading orphan modules"
set modules [split $env(PMODULES_LOADED_${GROUP}) ":"]
foreach m ${modules} {
if { ${m} == "--APPMARKER--" } {
continue
}
if { [is-loaded ${m}] } {
debug "unloading: $m"
debug "mode=remove: unloading $m"
module unload ${m}
}
}
} else {
debug "no orphan modules to unload"
debug "mode=remove: no orphan modules to unload"
}
debug "mode=remove: $env(MODULEPATH)"
set dir [file join \
@@ -79,18 +78,6 @@ proc module-addgroup { group } {
remove-path UsedGroups $group
debug "mode=remove: $env(UsedGroups)"
}
if { [module-info mode switch2] } {
debug "mode=switch2"
set dir [file join \
$::PmodulesRoot \
$group \
$::PmodulesModulfilesDir \
[module-info name]]
if { [file isdirectory $dir] } {
append-path MODULEPATH $dir
}
append-path UsedGroups ${group}
}
}
proc set-family { group } {
@@ -107,37 +94,6 @@ proc _pmodules_update_loaded_modules { group name version } {
remove-path PMODULES_LOADED_${GROUP} "--APPMARKER--"
}
#
# load dependencies, but do *not* unload dependencies
#
proc _pmodules_load_dependencies { fname } {
if { ! [ file exists ${fname} ] } {
return
}
if { ! [module-info mode load] } {
return
}
debug "load dependencies from: ${fname}"
# Slurp up the data file
set fp [open ${fname} r]
set file_data [read ${fp}]
close ${fp}
set data [split ${file_data} "\n"]
foreach line ${data} {
debug "MODULEPATH=$::env(MODULEPATH)"
set module_name [string trim $line]
if { ${module_name} == "#" || ${module_name} == "" } {
continue
}
if { [is-loaded ${module_name}] } {
debug "module already loaded: ${module_name}"
continue
}
debug "module load: ${module_name}"
module load ${module_name}
}
}
proc lreverse_n { list n } {
set res {}
set i [expr [llength $list] - $n]
@@ -355,15 +311,6 @@ proc _pmodules_init_global_vars { } {
debug "group of module $name: $group"
}
proc _pmodules_output_message { fname } {
if { [ file exists "${fname}" ] } {
set fp [open "${fname}" r]
set info_text [read $fp]
close $fp
puts stderr ${info_text}
}
}
if { [info exists ::whatis] } {
module-whatis "$whatis"
}
@@ -375,11 +322,6 @@ _pmodules_init_global_vars
#
conflict $name
if { [module-info mode load] } {
debug "${name}/${version}: loading ... "
_pmodules_output_message "${PREFIX}/.info"
}
_pmodules_setenv ${PREFIX} ${name} ${version}
_pmodules_update_loaded_modules ${group} ${name} ${version}
+34 -4
View File
@@ -824,11 +824,12 @@ subcommand_load() {
if [[ ${current_modulefile} =~ ${PMODULES_ROOT} ]]; then
# modulefile is in our hierarchy
# ${prefix} was set in is_available()!
test -r "${prefix}/.info" && cat "$_" 1>&2
test -r "${prefix}/.dependencies" && load_dependencies "$_"
fi
local -r tmpfile=$( "${mktemp}" /tmp/Pmodules.XXXXXX ) \
local tmpfile=$( "${mktemp}" /tmp/Pmodules.XXXXXX ) \
|| std::die 1 "Oops: unable to create tmp file!\n"
local output=$("${modulecmd}" "${shell}" ${opts} load "${current_modulefile}" 2> "${tmpfile}")
local output=$("${modulecmd}" "${shell}" ${opts} 'load' "${current_modulefile}" 2> "${tmpfile}")
echo "${output}"
eval "${output}"
local error=$( < "${tmpfile}")
@@ -884,7 +885,7 @@ subcommand_unload() {
fi
for arg in "${args[@]}"; do
local output=$("${modulecmd}" "${g_shell}" "${subcommand}" "${arg}")
local output=$("${modulecmd}" "${g_shell}" 'unload' "${arg}")
echo "${output}"
eval "${output}"
done
@@ -894,7 +895,36 @@ subcommand_unload() {
# swap <module> [<module>]
#
subcommand_swap() {
subcommand_generic1or2 swap "$@"
local opts=()
pmodules::get_options opts -- '' "$@" || subcommand_help_${subcommand}
eval set -- "${opts[@]}"
local args=()
while (( $# > 0 )); do
case $1 in
-- )
;;
* )
args+=( "$1" )
;;
esac
shift
done
if (( ${#args[@]} == 0 )); then
std::die 3 "%s %s: missing argument\n" \
"${CMD}" 'unload'
elif (( ${#args[@]} > 2 )); then
std::die 3 "%s %s: too many arguments\n" \
"${CMD}" 'unload'
fi
if (( ${#args[@]} == 1 )); then
module_to_load=${args[0]}
module_to_unload=${module_to_load%/*}
else
module_to_unload=${args[0]}
module_to_load=${args[1]}
fi
subcommand_unload "${module_to_unload}"
subcommand_load "${module_to_load}"
}
#