mirror of
https://github.com/Pmodules/Pmodules.git
synced 2026-06-29 18:59:39 +02:00
changes to fix sub-command 'swap' merged
This commit is contained in:
+1
-40
@@ -42,46 +42,7 @@ 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
|
||||
|
||||
|
||||
+6
-66
@@ -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
|
||||
@@ -39,7 +40,6 @@ proc module-addgroup { group } {
|
||||
|
||||
debug "mode=[module-info mode]"
|
||||
if { [module-info mode load] } {
|
||||
debug "mode is load"
|
||||
foreach overlay $::PmodulesOverlays {
|
||||
set dir [file join \
|
||||
$overlay \
|
||||
@@ -55,22 +55,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)"
|
||||
foreach overlay $::PmodulesOverlays {
|
||||
@@ -84,21 +84,6 @@ proc module-addgroup { group } {
|
||||
remove-path UsedGroups $group
|
||||
debug "mode=remove: $env(UsedGroups)"
|
||||
}
|
||||
if { [module-info mode switch2] } {
|
||||
debug "mode=switch2"
|
||||
foreach overlay $::PmodulesOverlays {
|
||||
set dir [file join \
|
||||
$overlay \
|
||||
$group \
|
||||
$::PmodulesModulfilesDir \
|
||||
[module-info name]]
|
||||
if { [file isdirectory $dir] } {
|
||||
append-path MODULEPATH $dir
|
||||
}
|
||||
}
|
||||
append-path UsedGroups ${group}
|
||||
debug "mode=switch2: $env(UsedGroups)"
|
||||
}
|
||||
}
|
||||
|
||||
proc set-family { group } {
|
||||
@@ -115,37 +100,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]
|
||||
@@ -376,15 +330,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"
|
||||
}
|
||||
@@ -396,11 +341,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}
|
||||
|
||||
|
||||
@@ -875,11 +875,12 @@ subcommand_load() {
|
||||
if [[ ${current_modulefile} =~ ${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 "$_"
|
||||
break
|
||||
fi
|
||||
done
|
||||
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}")
|
||||
echo "${output}"
|
||||
@@ -937,7 +938,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
|
||||
@@ -947,7 +948,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