diff --git a/vendor/init.bat b/vendor/init.bat index ac32ef7..fd7ef4e 100644 --- a/vendor/init.bat +++ b/vendor/init.bat @@ -181,54 +181,14 @@ if defined GIT_INSTALL_ROOT ( %lib_git% validate_version VENDORED %GIT_VERSION_VENDORED% :: check if git is in path... -setlocal enabledelayedexpansion for /F "delims=" %%F in ('where git.exe 2^>nul') do ( :: get the absolute path to the user provided git binary - pushd %%~dpF - :: check if there's shim - and if yes follow the path - if exist git.shim ( - for /F "tokens=2 delims== " %%I in (git.shim) do ( - pushd %%~dpI - set "test_dir=!CD!" - popd - ) - ) else ( - set "test_dir=!CD!" - ) - popd - - :: get the version information for the user provided git binary - %lib_git% read_version USER "!test_dir!" - %lib_git% validate_version USER !GIT_VERSION_USER! - - if !errorlevel! geq 0 ( - :: compare the user git version against the vendored version - %lib_git% compare_versions USER VENDORED - - :: use the user provided git if its version is greater than, or equal to the vendored git - if !errorlevel! geq 0 if exist "!test_dir:~0,-4!\cmd\git.exe" ( - set "GIT_INSTALL_ROOT=!test_dir:~0,-4!" - set test_dir= - goto :FOUND_GIT - ) else if !errorlevel! geq 0 ( - set "GIT_INSTALL_ROOT=!test_dir!" - set test_dir= - goto :FOUND_GIT - ) else ( - call :verbose_output Found old !GIT_VERSION_USER! in "!test_dir!", but not using... - set test_dir= - ) - ) else ( - :: if the user provided git executable is not found - if !errorlevel! equ -255 ( - call :verbose_output No git at "!git_executable!" found. - set test_dir= - ) - ) + call :is_git_shim "%%~dpF" + call :get_user_git_version + call :compare_git_versions ) -endlocal & set "GIT_INSTALL_ROOT=%GIT_INSTALL_ROOT%" & set "GIT_VERSION_VENDORED=%GIT_VERSION_VENDORED%" -:: our last hope: our own git... + :VENDORED_GIT if exist "%CMDER_ROOT%\vendor\git-for-windows" ( set "GIT_INSTALL_ROOT=%CMDER_ROOT%\vendor\git-for-windows" @@ -242,7 +202,7 @@ if exist "%CMDER_ROOT%\vendor\git-for-windows" ( goto :CONFIGURE_GIT :FOUND_GIT -%lib_console% debug_output "Using found Git '!GIT_VERSION_USER!' from '%GIT_INSTALL_ROOT%..." +%lib_console% debug_output "Using found Git '%GIT_VERSION_USER%' from '%GIT_INSTALL_ROOT%..." goto :CONFIGURE_GIT :CONFIGURE_GIT @@ -407,3 +367,56 @@ if %time_init% gtr 0 ( "%cmder_root%\vendor\bin\timer.cmd" %CMDER_INIT_START% %CMDER_INIT_END% ) exit /b + +:is_git_shim + pushd "%~1" + :: check if there's shim - and if yes follow the path + setlocal enabledelayedexpansion + if exist git.shim ( + for /F "tokens=2 delims== " %%I in (git.shim) do ( + pushd %%~dpI + set "test_dir=!CD!" + popd + ) + ) else ( + set "test_dir=!CD!" + ) + endlocal & set "test_dir=%test_dir%" + + popd + exit /b + +:compare_git_versions + if %errorlevel% geq 0 ( + :: compare the user git version against the vendored version + %lib_git% compare_versions USER VENDORED + + :: use the user provided git if its version is greater than, or equal to the vendored git + if %errorlevel% geq 0 if exist "%test_dir:~0,-4%\cmd\git.exe" ( + set "GIT_INSTALL_ROOT=%test_dir:~0,-4%" + set test_dir= + goto :FOUND_GIT + ) else if %errorlevel% geq 0 ( + set "GIT_INSTALL_ROOT=%test_dir%" + set test_dir= + goto :FOUND_GIT + ) else ( + call :verbose_output Found old %GIT_VERSION_USER% in "%test_dir%", but not using... + set test_dir= + ) + ) else ( + :: if the user provided git executable is not found + if %errorlevel% equ -255 ( + call :verbose_output No git at "%git_executable%" found. + set test_dir= + ) + ) + exit /b + +:get_user_git_version + + :: get the version information for the user provided git binary + %lib_git% read_version USER "%test_dir%" + %lib_git% validate_version USER %GIT_VERSION_USER% + exit /b + diff --git a/vendor/lib/lib_git.cmd b/vendor/lib/lib_git.cmd index bfbcdb2..3f4cdef 100644 --- a/vendor/lib/lib_git.cmd +++ b/vendor/lib/lib_git.cmd @@ -34,7 +34,6 @@ exit /b ::: GIT_VERSION_[GIT SCOPE] Env variable containing Git semantic version string :::------------------------------------------------------------------------------- - setlocal enabledelayedexpansion :: clear the variables set GIT_VERSION_%~1= @@ -49,18 +48,20 @@ exit /b ) :: get the git version in the provided directory - for /F "tokens=1,2,3 usebackq" %%A in (`"%git_executable%" --version 2^>nul`) do ( + + "%git_executable%" --version > "%temp%\git_version.txt" + setlocal enabledelayedexpansion + for /F "tokens=1,2,3 usebackq" %%A in (`type "%temp%\git_version.txt" 2^>nul`) do ( if /i "%%A %%B" == "git version" ( set "GIT_VERSION=%%C" - %lib_console% debug_output :read_version "Env Var - GIT_VERSION_%~1=!GIT_VERSION!" ) else ( - %lib_console% show_error "git --version" returned an inproper version string! + echo "'git --version' returned an inproper version string!" pause exit /b ) ) + endlocal & set "GIT_VERSION_%~1=%GIT_VERSION%" & %lib_console% debug_output :read_version "Env Var - GIT_VERSION_%~1=%GIT_VERSION%" - endlocal & set "GIT_VERSION_%~1=%GIT_VERSION%" exit /b :parse_version @@ -88,9 +89,10 @@ exit /b ::: [SCOPE]_BUILD Scoped Build version. :::------------------------------------------------------------------------------- - setlocal enabledelayedexpansion :: process a `x.x.x.xxxx.x` formatted string %lib_console% debug_output :parse_version "ARGV[1]=%~1, ARGV[2]=%~2" + + setlocal enabledelayedexpansion for /F "tokens=1-3* delims=.,-" %%A in ("%2") do ( set "%~1_MAJOR=%%A" set "%~1_MINOR=%%B" @@ -98,9 +100,17 @@ exit /b set "%~1_BUILD=%%D" ) - endlocal & set "%~1_MAJOR=!%~1_MAJOR!" & set "%~1_MINOR=!%~1_MINOR!" & set "%~1_PATCH=!%~1_PATCH!" & set "%~1_BUILD=!%~1_BUILD!" + REM endlocal & set "%~1_MAJOR=!%~1_MAJOR!" & set "%~1_MINOR=!%~1_MINOR!" & set "%~1_PATCH=!%~1_PATCH!" & set "%~1_BUILD=!%~1_BUILD!" + if "%~1" == "VENDORED" ( + endlocal & set "%~1_MAJOR=%VENDORED_MAJOR%" & set "%~1_MINOR=%VENDORED_MINOR%" & set "%~1_PATCH=%VENDORED_PATCH%" & set "%~1_BUILD=%VENDORED_BUILD%" + ) else ( + endlocal & set "%~1_MAJOR=%USER_MAJOR%" & set "%~1_MINOR=%USER_MINOR%" & set "%~1_PATCH=%USER_PATCH%" & set "%~1_BUILD=%USER_BUILD%" + ) + exit /b +:endlocal_set_git_version + :validate_version :::=============================================================================== :::validate_version - Validate semantic version string 'x.x.x.x'. @@ -121,10 +131,16 @@ exit /b :: now parse the version information into the corresponding variables %lib_console% debug_output :validate_version "ARGV[1]=%~1, ARGV[2]=%~2" + call :parse_version %~1 %~2 :: ... and maybe display it, for debugging purposes. - %lib_console% debug_output :validate_version "Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!" + REM %lib_console% debug_output :validate_version "Found Git Version for %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD!" + if "%~1" == "VENDORED" ( + %lib_console% debug_output :validate_version "Found Git Version for %~1: %VENDORED_MAJOR%.%VENDORED_MINOR%.%VENDORED_PATCH%.%VENDORED_BUILD%" + ) else ( + %lib_console% debug_output :validate_version "Found Git Version for %~1: %USER_MAJOR%.%USER_MINOR%.%USER_PATCH%.%USER_BUILD%" + ) exit /b :compare_versions @@ -149,20 +165,21 @@ exit /b :: whichever binary that has the most recent version will be used based on the return code. %lib_console% debug_output Comparing: - %lib_console% debug_output %~1: !%~1_MAJOR!.!%~1_MINOR!.!%~1_PATCH!.!%~1_BUILD! - %lib_console% debug_output %~2: !%~2_MAJOR!.!%~2_MINOR!.!%~2_PATCH!.!%~2_BUILD! + %lib_console% debug_output %~1: %USER_MAJOR%.%USER_MINOR%.%USER_PATCH%.%USER_BUILD% + %lib_console% debug_output %~2: %VENDORED_MAJOR%.%VENDORED_MINOR%.%VENDORED_PATCH%.%VENDORED_BUILD% - if !%~1_MAJOR! GTR !%~2_MAJOR! (exit /b 1) - if !%~1_MAJOR! LSS !%~2_MAJOR! (exit /b -1) + setlocal enabledelayedexpansion + if !%~1_MAJOR! GTR !%~2_MAJOR! (endlocal & exit /b 1) + if !%~1_MAJOR! LSS !%~2_MAJOR! (endlocal & exit /b -1) - if !%~1_MINOR! GTR !%~2_MINOR! (exit /b 1) - if !%~1_MINOR! LSS !%~2_MINOR! (exit /b -1) + if !%~1_MINOR! GTR !%~2_MINOR! (endlocal & exit /b 1) + if !%~1_MINOR! LSS !%~2_MINOR! (endlocal & exit /b -1) - if !%~1_PATCH! GTR !%~2_PATCH! (exit /b 1) - if !%~1_PATCH! LSS !%~2_PATCH! (exit /b -1) + if !%~1_PATCH! GTR !%~2_PATCH! (endlocal & exit /b 1) + if !%~1_PATCH! LSS !%~2_PATCH! (endlocal & exit /b -1) - if !%~1_BUILD! GTR !%~2_BUILD! (exit /b 1) - if !%~1_BUILD! LSS !%~2_BUILD! (exit /b -1) + if !%~1_BUILD! GTR !%~2_BUILD! (endlocal & exit /b 1) + if !%~1_BUILD! LSS !%~2_BUILD! (endlocal & exit /b -1) :: looks like we have the same versions. - exit /b 0 + endlocal & exit /b 0 diff --git a/vendor/lib/lib_path.cmd b/vendor/lib/lib_path.cmd index 08a5c76..8f7188c 100644 --- a/vendor/lib/lib_path.cmd +++ b/vendor/lib/lib_path.cmd @@ -64,7 +64,7 @@ exit /b exit /b ) - setlocal enabledelayedexpansion + rem setlocal enabledelayedexpansion set found=0 set "find_query=%add_path%" @@ -74,20 +74,22 @@ exit /b if "%CMDER_CONFIGURED%" == "1" ( %lib_console% debug_output :enhance_path "Env Var - find_query=%find_query%" echo "%path%"|%WINDIR%\System32\findstr >nul /I /R ";%find_query%\"$" - if "!ERRORLEVEL!" == "0" set found=1 + REM if "!ERRORLEVEL!" == "0" set found=1 + call :set_found ) - %lib_console% debug_output :enhance_path "Env Var 1 - found=!found!" + %lib_console% debug_output :enhance_path "Env Var 1 - found=%found%" - if "!found!" == "0" ( + if "%found%" == "0" ( if "%CMDER_CONFIGURED%" == "1" ( echo "%path%"|%WINDIR%\System32\findstr >nul /i /r ";%find_query%;" - if "!ERRORLEVEL!" == "0" set found=1 + REM if "!ERRORLEVEL!" == "0" set found=1 + call :set_found ) - %lib_console% debug_output :enhance_path "Env Var 2 - found=!found!" + %lib_console% debug_output :enhance_path "Env Var 2 - found=%found%" ) if "%found%" == "0" ( - %lib_console% debug_output :enhance_path "BEFORE Env Var - PATH=!path!" + %lib_console% debug_output :enhance_path "BEFORE Env Var - PATH=%path%" if /i "%position%" == "append" ( %lib_console% debug_output :enhance_path "Appending '%add_path%'" set "PATH=%PATH%;%add_path%" @@ -96,11 +98,16 @@ exit /b set "PATH=%add_path%;%PATH%" ) - %lib_console% debug_output :enhance_path "AFTER Env Var - PATH=!path!" + %lib_console% debug_output :enhance_path "AFTER Env Var - PATH=%path%" ) - :end_enhance_path - endlocal & set "PATH=%PATH:;;=;%" + rem :end_enhance_path + rem endlocal & set "PATH=%PATH:;;=;%" + set "PATH=%PATH:;;=;%" + exit /b + +:set_found + if "!ERRORLEVEL!" == "0" set found=1 exit /b :enhance_path_recursive @@ -158,26 +165,36 @@ exit /b exit /b ) - setlocal enabledelayedexpansion - if "%depth%" == "" set depth=0 + rem setlocal enabledelayedexpansion + if "%depth%" == "" set depth=0 %lib_console% debug_output :enhance_path_recursive "Env Var - add_path=%add_path%" %lib_console% debug_output :enhance_path_recursive "Env Var - position=%position%" %lib_console% debug_output :enhance_path_recursive "Env Var - max_depth=%max_depth%" - if %max_depth% gtr !depth! ( + if %max_depth% gtr %depth% ( %lib_console% debug_output :enhance_path_recursive "Adding parent directory - '%add_path%'" call :enhance_path "%add_path%" %position% - set /a "depth=!depth!+1" - - for /d %%i in ("%add_path%\*") do ( - %lib_console% debug_output :enhance_path_recursive "Env Var BEFORE - depth=!depth!" - %lib_console% debug_output :enhance_path_recursive "Found Subdirectory - '%%~fi'" - call :enhance_path_recursive "%%~fi" %max_depth% %position% - %lib_console% debug_output :enhance_path_recursive "Env Var AFTER- depth=!depth!" - ) + REM set /a "depth=!depth!+1" + call :set_depth + call :loop_depth ) - :end_enhance_path_recursive - endlocal & set "PATH=%PATH%" + rem :end_enhance_path_recursive + rem endlocal & set "PATH=%PATH%" + set "PATH=%PATH%" exit /b + +: set_depth + set /a "depth=%depth%+1" + exit /b + +:loop_depth + for /d %%i in ("%add_path%\*") do ( + %lib_console% debug_output :enhance_path_recursive "Env Var BEFORE - depth=%depth%" + %lib_console% debug_output :enhance_path_recursive "Found Subdirectory - '%%~fi'" + call :enhance_path_recursive "%%~fi" %max_depth% %position% + %lib_console% debug_output :enhance_path_recursive "Env Var AFTER- depth=%depth%" + ) + exit /b +