mirror of
https://github.com/Pmodules/Pmodules.git
synced 2026-06-28 10:29:37 +02:00
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:
+1
-41
@@ -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
@@ -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}
|
||||
|
||||
|
||||
@@ -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}"
|
||||
}
|
||||
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user