-
Notifications
You must be signed in to change notification settings - Fork 0
/
pvm.bat
133 lines (94 loc) · 3.09 KB
/
pvm.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
@echo off
echo %PSModulePath% | findstr %USERPROFILE% >NUL
if %ERRORLEVEL% equ 0 goto :IS_PWSH
goto :IS_CMD
:IS_PWSH
@echo Sorry :(
@echo Currently no powershell implementation is available
@rem todo add powershell implementation
goto :eof
:IS_CMD
set CONF_PKG_VER=1.0.0
set CONF_DEF_INSTALL_PATH=C:\pvm\
set DEFAULT_PHP_DIR=C:\php
@REM if[%~1]==[list] ( rem list available php versions )
@REM help commmand for general commands. todo: Add indepth descriptions for commands and subcommands
set CONF_SUPPORTED_ARGS=-v --version list --help use --install --uninstall
SET _err_handlers="%~dp0%lib/err_handlers.bat"
SET _install="%~dp0%install.bat"
SET _uninstall="%~dp0%uninstall.bat"
if not [%~1]==[] (goto :PARSE_ARGS) else (goto :ERR_INVALID_ARG)
@REM todo: refactor into cli parser file so pvm functionally can be decoupled from installation depedencies
:PARSE_ARGS
for %%i in (%CONF_SUPPORTED_ARGS%) do (
if %%i==%~1 ( goto :SUB_PRC_VALID_PARSE_ARGS)
)
call %_err_handlers% ERR_INVALID_ARG "%~1"
:SUB_PRC_VALID_PARSE_ARGS
if [%~1]==[-v] CALL :PRC_PKG_VERSION
if [%~1]==[--version] CALL :PRC_PKG_VERSION
if [%~1]==[list] CALL :PRC_AVAIL_PHP_VERSIONS
if [%~1]==[use] (
if [%~2]==[] (
echo Missing required version number for command "use".
goto :eof
)
call :PRC_SET_PHP_VER %~2
)
@REM if [%~1]==[--install] CALL :INSTALL_PKG
if [%~1]==[--install] CALL %_install%
if [%~1]==[--uninstall] CALL %_uninstall%
if [%~1]==[--help] (
call :PRC_HELP
)
goto :eof
:PRC_PKG_VERSION
echo v%CONF_PKG_VER%
EXIT /b 0
:PRC_HELP rem OPT_COMMAND
echo List of available commands:
echo %CONF_SUPPORTED_ARGS: =, %
EXIT /b 0
:PRC_SET_PHP_VER rem VERSION_STRING
call :PRC_GET_CURRENT_VERSION _ current_version
goto :MODIFY_PATH_STRING current_version
EXIT /b 0
:PRC_GET_CURRENT_VERSION rem _ RETURN
call php "-v" > temp.txt
setlocal enabledelayedexpansion
for /F "tokens=2 delims= " %%a in ('type temp.txt') do (
endlocal
set %~2=%%a
EXIT /b 0
)
EXIT /b 0
:MODIFY_PATH_STRING rem VERSION_NUMBER
SET path_string=%PATH%
SET current_version=php%current_version%
SET new_version=php%1
@REM The call there causes another layer of variable expansion,
@REM making it necessary to quote the original % signs but it all works out in the end.
CALL SET updated_path=%%path_string:%current_version%=php%1%%%
@REM Unquote parameter with
ECHO "Setting version to: %1"
@REM echo PATH=%updated_path%
SET "PATH=%updated_path%"
del /Q temp.txt
ECHO Please run "php -v" to confirm PHP version matches the desired one.
exit /b 0
goto :eof
@REM Prints current available php version in the default php dir based on folder names
:PRC_AVAIL_PHP_VERSIONS
call :PRC_GET_CURRENT_VERSION _ current_version
SETLOCAL EnableDelayedExpansion
for /f %%d in ('dir %DEFAULT_PHP_DIR% /b /A:D') do (
set sem_ver=%%d
@REM Parses out sem_ver string
call set sem_ver=%%sem_ver:php=%%
if /I "%current_version%" EQU "!sem_ver!" (
call set sem_ver=!sem_ver! * Current
)
echo !sem_ver!
)
endlocal
exit /b 0