diff options
-rw-r--r-- | bin/spack.bat | 48 | ||||
-rw-r--r-- | lib/spack/llnl/util/filesystem.py | 16 |
2 files changed, 37 insertions, 27 deletions
diff --git a/bin/spack.bat b/bin/spack.bat index 495b61a794..073f778c34 100644 --- a/bin/spack.bat +++ b/bin/spack.bat @@ -83,6 +83,16 @@ if defined _sp_flags ( exit /B 0 ) ) +if not defined _sp_subcommand ( + if not defined _sp_args ( + if not defined _sp_flags ( + python "%spack%" --help + exit /B 0 + ) + ) +) + + :: pass parsed variables outside of local scope. Need to do :: this because delayedexpansion can only be set by setlocal echo %_sp_flags%>flags @@ -92,24 +102,24 @@ endlocal set /p _sp_subcommand=<subcmd set /p _sp_flags=<flags set /p _sp_args=<args -set str_subcommand=%_sp_subcommand:"='% -set str_flags=%_sp_flags:"='% -set str_args=%_sp_args:"='% -if "%str_subcommand%"=="ECHO is off." (set "_sp_subcommand=") -if "%str_flags%"=="ECHO is off." (set "_sp_flags=") -if "%str_args%"=="ECHO is off." (set "_sp_args=") +if "%_sp_subcommand%"=="ECHO is off." (set "_sp_subcommand=") +if "%_sp_subcommand%"=="ECHO is on." (set "_sp_subcommand=") +if "%_sp_flags%"=="ECHO is off." (set "_sp_flags=") +if "%_sp_flags%"=="ECHO is on." (set "_sp_flags=") +if "%_sp_args%"=="ECHO is off." (set "_sp_args=") +if "%_sp_args%"=="ECHO is on." (set "_sp_args=") del subcmd del flags del args :: Filter out some commands. For any others, just run the command. -if "%_sp_subcommand%" == "cd" ( +if %_sp_subcommand% == "cd" ( goto :case_cd -) else if "%_sp_subcommand%" == "env" ( +) else if %_sp_subcommand% == "env" ( goto :case_env -) else if "%_sp_subcommand%" == "load" ( +) else if %_sp_subcommand% == "load" ( goto :case_load -) else if "%_sp_subcommand%" == "unload" ( +) else if %_sp_subcommand% == "unload" ( goto :case_load ) else ( goto :default_case @@ -143,19 +153,21 @@ goto :end_switch :: If no args or args contain --bat or -h/--help: just execute. if NOT defined _sp_args ( goto :default_case -)else if NOT "%_sp_args%"=="%_sp_args:--help=%" ( +) +set args_no_quote=%_sp_args:"=% +if NOT "%args_no_quote%"=="%args_no_quote:--help=%" ( goto :default_case -) else if NOT "%_sp_args%"=="%_sp_args: -h=%" ( +) else if NOT "%args_no_quote%"=="%args_no_quote: -h=%" ( goto :default_case -) else if NOT "%_sp_args%"=="%_sp_args:--bat=%" ( +) else if NOT "%args_no_quote%"=="%args_no_quote:--bat=%" ( goto :default_case -) else if NOT "%_sp_args%"=="%_sp_args:deactivate=%" ( +) else if NOT "%args_no_quote%"=="%args_no_quote:deactivate=%" ( for /f "tokens=* USEBACKQ" %%I in ( - `call python "%spack%" %_sp_flags% env deactivate --bat %_sp_args:deactivate=%` + `call python %spack% %_sp_flags% env deactivate --bat %args_no_quote:deactivate=%` ) do %%I -) else if NOT "%_sp_args%"=="%_sp_args:activate=%" ( +) else if NOT "%args_no_quote%"=="%args_no_quote:activate=%" ( for /f "tokens=* USEBACKQ" %%I in ( - `call python "%spack%" %_sp_flags% env activate --bat %_sp_args:activate=%` + `python %spack% %_sp_flags% env activate --bat %args_no_quote:activate=%` ) do %%I ) else ( goto :default_case @@ -220,4 +232,4 @@ for %%I in (%~2) do ( :pathadd "%~1" "%%I\%%Z" ) ) -exit /B %ERRORLEVEL%
\ No newline at end of file +exit /B %ERRORLEVEL% diff --git a/lib/spack/llnl/util/filesystem.py b/lib/spack/llnl/util/filesystem.py index 8581081e48..b39a17b52a 100644 --- a/lib/spack/llnl/util/filesystem.py +++ b/lib/spack/llnl/util/filesystem.py @@ -23,7 +23,7 @@ from llnl.util import tty from llnl.util.lang import dedupe, memoized from llnl.util.symlink import islink, symlink -from spack.util.executable import CommandNotFoundError, Executable, which +from spack.util.executable import Executable, which from spack.util.path import path_to_os_path, system_path_filter is_windows = _platform == "win32" @@ -117,13 +117,7 @@ def path_contains_subdirectory(path, root): @memoized def file_command(*args): """Creates entry point to `file` system command with provided arguments""" - try: - file_cmd = which("file", required=True) - except CommandNotFoundError as e: - if is_windows: - raise CommandNotFoundError("`file` utility is not available on Windows") - else: - raise e + file_cmd = which("file", required=True) for arg in args: file_cmd.add_default_arg(arg) return file_cmd @@ -134,7 +128,11 @@ def _get_mime_type(): """Generate method to call `file` system command to aquire mime type for a specified path """ - return file_command("-b", "-h", "--mime-type") + if is_windows: + # -h option (no-dereference) does not exist in Windows + return file_command("-b", "--mime-type") + else: + return file_command("-b", "-h", "--mime-type") @memoized |