Allow Spack Environments with '-h' in the name (#15429)
If a user invoked "spack env activate example-henv", Spack would mistakenly interpret the "-h" from "example-henv" as the "-h" option. This commit allows users to create and activate environments with "-h" in the name. This issue existed for bash shell support as well as csh support, and this commit addresses both, along with some other unrelated csh support issues.
This commit is contained in:
parent
b9688a8c35
commit
c6c1d01ab6
@ -66,7 +66,7 @@ case cd:
|
|||||||
[ $#_sp_args -gt 0 ] && set _sp_arg = ($_sp_args[1])
|
[ $#_sp_args -gt 0 ] && set _sp_arg = ($_sp_args[1])
|
||||||
shift _sp_args
|
shift _sp_args
|
||||||
|
|
||||||
if ( "$_sp_arg" == "-h" ) then
|
if ( "$_sp_arg" == "-h" || "$_sp_args" == "--help" ) then
|
||||||
\spack cd -h
|
\spack cd -h
|
||||||
else
|
else
|
||||||
cd `\spack location $_sp_arg $_sp_args`
|
cd `\spack location $_sp_arg $_sp_args`
|
||||||
@ -78,7 +78,7 @@ case env:
|
|||||||
set _sp_arg=""
|
set _sp_arg=""
|
||||||
[ $#_sp_args -gt 0 ] && set _sp_arg = ($_sp_args[1])
|
[ $#_sp_args -gt 0 ] && set _sp_arg = ($_sp_args[1])
|
||||||
|
|
||||||
if ( "$_sp_arg" == "-h" ) then
|
if ( "$_sp_arg" == "-h" || "$_sp_arg" == "--help" ) then
|
||||||
\spack env -h
|
\spack env -h
|
||||||
else
|
else
|
||||||
switch ($_sp_arg)
|
switch ($_sp_arg)
|
||||||
@ -86,12 +86,18 @@ case env:
|
|||||||
set _sp_env_arg=""
|
set _sp_env_arg=""
|
||||||
[ $#_sp_args -gt 1 ] && set _sp_env_arg = ($_sp_args[2])
|
[ $#_sp_args -gt 1 ] && set _sp_env_arg = ($_sp_args[2])
|
||||||
|
|
||||||
if ( "$_sp_env_arg" == "" || "$_sp_args" =~ "*--sh*" || "$_sp_args" =~ "*--csh*" || "$_sp_args" =~ "*-h*" ) then
|
# Space needed here to differentiate between `-h`
|
||||||
# no args or args contain -h/--help, --sh, or --csh: just execute
|
# argument and environments with "-h" in the name.
|
||||||
|
if ( "$_sp_env_arg" == "" || \
|
||||||
|
"$_sp_args" =~ "* --sh*" || \
|
||||||
|
"$_sp_args" =~ "* --csh*" || \
|
||||||
|
"$_sp_args" =~ "* -h*" || \
|
||||||
|
"$_sp_args" =~ "* --help*" ) then
|
||||||
|
# No args or args contain --sh, --csh, or -h/--help: just execute.
|
||||||
\spack $_sp_flags env $_sp_args
|
\spack $_sp_flags env $_sp_args
|
||||||
else
|
else
|
||||||
shift _sp_args # consume 'activate' or 'deactivate'
|
shift _sp_args # consume 'activate' or 'deactivate'
|
||||||
# actual call to activate: source the output
|
# Actual call to activate: source the output.
|
||||||
eval `\spack $_sp_flags env activate --csh $_sp_args`
|
eval `\spack $_sp_flags env activate --csh $_sp_args`
|
||||||
endif
|
endif
|
||||||
breaksw
|
breaksw
|
||||||
@ -99,30 +105,40 @@ case env:
|
|||||||
set _sp_env_arg=""
|
set _sp_env_arg=""
|
||||||
[ $#_sp_args -gt 1 ] && set _sp_env_arg = ($_sp_args[2])
|
[ $#_sp_args -gt 1 ] && set _sp_env_arg = ($_sp_args[2])
|
||||||
|
|
||||||
if ( "$_sp_env_arg" != "" ) then
|
# Space needed here to differentiate between `--sh`
|
||||||
# with args: execute the command
|
# argument and environments with "--sh" in the name.
|
||||||
|
if ( "$_sp_args" =~ "* --sh*" || \
|
||||||
|
"$_sp_args" =~ "* --csh*" ) then
|
||||||
|
# Args contain --sh or --csh: just execute.
|
||||||
\spack $_sp_flags env $_sp_args
|
\spack $_sp_flags env $_sp_args
|
||||||
|
else if ( "$_sp_env_arg" != "" ) then
|
||||||
|
# Any other arguments are an error or -h/--help: just run help.
|
||||||
|
\spack $_sp_flags env deactivate -h
|
||||||
else
|
else
|
||||||
# no args: source the output
|
# No args: source the output of the command.
|
||||||
eval `\spack $_sp_flags env deactivate --csh`
|
eval `\spack $_sp_flags env deactivate --csh`
|
||||||
endif
|
endif
|
||||||
breaksw
|
breaksw
|
||||||
default:
|
default:
|
||||||
echo default
|
|
||||||
\spack $_sp_flags env $_sp_args
|
\spack $_sp_flags env $_sp_args
|
||||||
breaksw
|
breaksw
|
||||||
endsw
|
endsw
|
||||||
endif
|
endif
|
||||||
|
breaksw
|
||||||
|
|
||||||
case load:
|
case load:
|
||||||
case unload:
|
case unload:
|
||||||
# Space in `-h` portion is important for differentiating -h option
|
# Get --sh, --csh, -h, or --help arguments.
|
||||||
# from variants that begin with "h" or packages with "-h" in name
|
# Space needed here to differentiate between `-h`
|
||||||
if ( "$_sp_spec" =~ "*--sh*" || "$_sp_spec" =~ "*--csh*" || \
|
# argument and specs with "-h" in the name.
|
||||||
" $_sp_spec" =~ "* -h*" || "$_sp_spec" =~ "*--help*") then
|
if ( " $_sp_spec" =~ "* --sh*" || \
|
||||||
# IF a shell is given, print shell output
|
" $_sp_spec" =~ "* --csh*" || \
|
||||||
|
" $_sp_spec" =~ "* -h*" || \
|
||||||
|
" $_sp_spec" =~ "* --help*") then
|
||||||
|
# Args contain --sh, --csh, or -h/--help: just execute.
|
||||||
\spack $_sp_flags $_sp_subcommand $_sp_spec
|
\spack $_sp_flags $_sp_subcommand $_sp_spec
|
||||||
else
|
else
|
||||||
# otherwise eval with csh
|
# Otherwise, eval with csh.
|
||||||
eval `\spack $_sp_flags $_sp_subcommand --csh $_sp_spec || \
|
eval `\spack $_sp_flags $_sp_subcommand --csh $_sp_spec || \
|
||||||
echo "exit 1"`
|
echo "exit 1"`
|
||||||
endif
|
endif
|
||||||
|
@ -115,31 +115,44 @@ spack() {
|
|||||||
else
|
else
|
||||||
case $_sp_arg in
|
case $_sp_arg in
|
||||||
activate)
|
activate)
|
||||||
_a="$@"
|
# Get --sh, --csh, or -h/--help arguments.
|
||||||
|
# Space needed here becauses regexes start with a space
|
||||||
|
# and `-h` may be the only argument.
|
||||||
|
_a=" $@"
|
||||||
|
# Space needed here to differentiate between `-h`
|
||||||
|
# argument and environments with "-h" in the name.
|
||||||
|
# Also see: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion
|
||||||
if [ -z ${1+x} ] || \
|
if [ -z ${1+x} ] || \
|
||||||
[ "${_a#*--sh}" != "$_a" ] || \
|
[ "${_a#* --sh}" != "$_a" ] || \
|
||||||
[ "${_a#*--csh}" != "$_a" ] || \
|
[ "${_a#* --csh}" != "$_a" ] || \
|
||||||
[ "${_a#*-h}" != "$_a" ];
|
[ "${_a#* -h}" != "$_a" ] || \
|
||||||
|
[ "${_a#* --help}" != "$_a" ];
|
||||||
then
|
then
|
||||||
# no args or args contain -h/--help, --sh, or --csh: just execute
|
# No args or args contain --sh, --csh, or -h/--help: just execute.
|
||||||
command spack env activate "$@"
|
command spack env activate "$@"
|
||||||
else
|
else
|
||||||
# actual call to activate: source the output
|
# Actual call to activate: source the output.
|
||||||
eval $(command spack $_sp_flags env activate --sh "$@")
|
eval $(command spack $_sp_flags env activate --sh "$@")
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
deactivate)
|
deactivate)
|
||||||
_a="$@"
|
# Get --sh, --csh, or -h/--help arguments.
|
||||||
if [ "${_a#*--sh}" != "$_a" ] || \
|
# Space needed here becauses regexes start with a space
|
||||||
[ "${_a#*--csh}" != "$_a" ];
|
# and `-h` may be the only argument.
|
||||||
|
_a=" $@"
|
||||||
|
# Space needed here to differentiate between `--sh`
|
||||||
|
# argument and environments with "--sh" in the name.
|
||||||
|
# Also see: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion
|
||||||
|
if [ "${_a#* --sh}" != "$_a" ] || \
|
||||||
|
[ "${_a#* --csh}" != "$_a" ];
|
||||||
then
|
then
|
||||||
# just execute the command if --sh or --csh are provided
|
# Args contain --sh or --csh: just execute.
|
||||||
command spack env deactivate "$@"
|
command spack env deactivate "$@"
|
||||||
elif [ -n "$*" ]; then
|
elif [ -n "$*" ]; then
|
||||||
# any other arguments are an error or help, so just run help
|
# Any other arguments are an error or -h/--help: just run help.
|
||||||
command spack env deactivate -h
|
command spack env deactivate -h
|
||||||
else
|
else
|
||||||
# no args: source the output of the command
|
# No args: source the output of the command.
|
||||||
eval $(command spack $_sp_flags env deactivate --sh)
|
eval $(command spack $_sp_flags env deactivate --sh)
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
@ -151,17 +164,19 @@ spack() {
|
|||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
"load"|"unload")
|
"load"|"unload")
|
||||||
# get --sh, --csh, --help, or -h arguments
|
# Get --sh, --csh, -h, or --help arguments.
|
||||||
# space is important for -h case to differentiate between `-h`
|
# Space needed here becauses regexes start with a space
|
||||||
# argument and specs with "-h" in package name or variant settings
|
# and `-h` may be the only argument.
|
||||||
_a=" $@"
|
_a=" $@"
|
||||||
|
# Space needed here to differentiate between `-h`
|
||||||
|
# argument and specs with "-h" in the name.
|
||||||
|
# Also see: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html#Shell-Parameter-Expansion
|
||||||
if [ "${_a#* --sh}" != "$_a" ] || \
|
if [ "${_a#* --sh}" != "$_a" ] || \
|
||||||
[ "${_a#* --csh}" != "$_a" ] || \
|
[ "${_a#* --csh}" != "$_a" ] || \
|
||||||
[ "${_a#* -h}" != "$_a" ] || \
|
[ "${_a#* -h}" != "$_a" ] || \
|
||||||
[ "${_a#* --help}" != "$_a" ];
|
[ "${_a#* --help}" != "$_a" ];
|
||||||
then
|
then
|
||||||
# just execute the command if --sh or --csh are provided
|
# Args contain --sh, --csh, or -h/--help: just execute.
|
||||||
# or if the -h or --help arguments are provided
|
|
||||||
command spack $_sp_flags $_sp_subcommand "$@"
|
command spack $_sp_flags $_sp_subcommand "$@"
|
||||||
else
|
else
|
||||||
eval $(command spack $_sp_flags $_sp_subcommand --sh "$@" || \
|
eval $(command spack $_sp_flags $_sp_subcommand --sh "$@" || \
|
||||||
|
Loading…
Reference in New Issue
Block a user