@echo off call "%~dp0lib_base.cmd" call "%%~dp0lib_console.cmd" set lib_git=call "%~dp0lib_git.cmd" if "%~1" == "/h" ( %lib_base% help "%~0" ) else if "%1" neq "" ( call :%* ) exit /b :read_version :::=============================================================================== :::read_version - Get the git.exe verion :::. :::include: :::. ::: call "lib_git.cmd" :::. :::usage: :::. ::: %lib_git% read_version "[dir_path]" :::. :::required: :::. ::: [GIT SCOPE] USER | VENDORED ::: [GIT PATH] Fully qualified path to the Git command root. :::. :::output: :::. ::: GIT_VERSION_[GIT SCOPE] Env variable containing Git semantic version string :::------------------------------------------------------------------------------- setlocal enabledelayedexpansion :: clear the variables set GIT_VERSION_%~1= :: set the executable path set "git_executable=%~2\git.exe" %lib_console% debug_output :read_version "Env Var - git_executable=%git_executable%" :: check if the executable actually exists if not exist "%git_executable%" ( %lib_console% debug_output :read_version "%git_executable% does not exist." exit /b -255 ) :: get the git version in the provided directory for /F "tokens=1,2,3 usebackq" %%A in (`"%git_executable%" --version 2^>nul`) do ( if /i "%%A %%B" == "git version" ( set "GIT_VERSION_%~1=%%C" %lib_console% debug_output :read_version "Env Var - GIT_VERSION_%~1=%%C" ) else ( %lib_console% show_error "git --version" returned an inproper version string! pause exit /b ) ) endlocal & set GIT_VERSION%~1=!GIT_VERSION%~1! exit /b :parse_version :::=============================================================================== :::parse_version - Parse semantic version string 'x.x.x.x' and return the pieces :::. :::include: :::. ::: call "$0" :::. :::usage: :::. ::: %lib_git% parse_version "[VERSION]" :::. :::required: :::. ::: [SCOPE] USER | VENDORED ::: [VERSION] Semantic version String. Ex: 1.2.3.4 :::. :::output: :::. ::: [SCOPE]_MAJOR Scoped Major version. ::: [SCOPE]_MINOR Scoped Minor version. ::: [SCOPE]_PATCH Scoped Patch version. ::: [SCOPE]_BUILD Scoped Build version. :::------------------------------------------------------------------------------- setlocal enabledelayedexpansion :: process a `x.x.x.xxxx.x` formatted string for /F "tokens=1-3* delims=.,-" %%A in ("%2") do ( set "%~1_MAJOR=%%A" set "%~1_MINOR=%%B" set "%~1_PATCH=%%C" 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!" exit /b :validate_version :::=============================================================================== :::validate_version - Validate semantic version string 'x.x.x.x'. :::. :::include: :::. ::: call "$0" :::. :::usage: :::. ::: %lib_git% validate_version [SCOPE] [VERSION] :::. :::required: :::. ::: [SCOPE] Example: USER | VENDORED ::: [VERSION] Semantic version String. Ex: 1.2.3.4 :::------------------------------------------------------------------------------- :: now parse the version information into the corresponding variables 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!" exit /b :compare_versions :::=============================================================================== :::compare_version - Compare semantic versions return latest version. :::. :::include: :::. ::: call "$0" :::. :::usage: :::. ::: %lib_git% validate_version [SCOPE1] [SCOPE2] :::. :::required: :::. ::: [SCOPE1] Example: USER ::: [SCOPE2] Example: VENDOR :::------------------------------------------------------------------------------- :: checks all major, minor, patch and build variables for the given arguments. :: 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! if !%~1_MAJOR! GTR !%~2_MAJOR! (exit /b 1) if !%~1_MAJOR! LSS !%~2_MAJOR! (exit /b -1) if !%~1_MINOR! GTR !%~2_MINOR! (exit /b 1) if !%~1_MINOR! LSS !%~2_MINOR! (exit /b -1) if !%~1_PATCH! GTR !%~2_PATCH! (exit /b 1) if !%~1_PATCH! LSS !%~2_PATCH! (exit /b -1) if !%~1_BUILD! GTR !%~2_BUILD! (exit /b 1) if !%~1_BUILD! LSS !%~2_BUILD! (exit /b -1) :: looks like we have the same versions. exit /b 0