mirror of
https://github.com/rehlds/resemiclip.git
synced 2024-12-26 14:45:54 +03:00
205 lines
4.7 KiB
Batchfile
205 lines
4.7 KiB
Batchfile
@setlocal enableextensions enabledelayedexpansion
|
|
@echo off
|
|
::
|
|
:: Pre-build auto-versioning script
|
|
::
|
|
|
|
set srcdir=%~1
|
|
set repodir=%~2
|
|
|
|
set old_version=
|
|
set version_major=0
|
|
set version_minor=0
|
|
set version_modifed=
|
|
|
|
set commitSHA=
|
|
set commitURL=
|
|
set commitCount=0
|
|
set branch_name=master
|
|
|
|
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set "dt=%%a"
|
|
set "YYYY=%dt:~0,4%"
|
|
set "MM=%dt:~4,2%"
|
|
set "DD=%dt:~6,2%"
|
|
set "hour=%dt:~8,2%"
|
|
set "min=%dt:~10,2%"
|
|
set "sec=%dt:~12,2%"
|
|
|
|
::
|
|
:: Remove leading zero from MM (e.g 09 > 9)
|
|
for /f "tokens=* delims=0" %%I in ("%MM%") do set MM=%%I
|
|
::
|
|
|
|
::
|
|
:: Index into array to get month name
|
|
::
|
|
for /f "tokens=%MM%" %%I in ("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") do set "month=%%I"
|
|
|
|
::
|
|
:: Check for git.exe presence
|
|
::
|
|
CALL git.exe describe >NUL 2>&1
|
|
set errlvl="%ERRORLEVEL%"
|
|
|
|
::
|
|
:: Read old appversion.h, if present
|
|
::
|
|
IF EXIST "%srcdir%\appversion.h" (
|
|
FOR /F "usebackq tokens=1,2,3" %%i in ("%srcdir%\appversion.h") do (
|
|
IF %%i==#define (
|
|
IF %%j==APP_VERSION (
|
|
:: Remove quotes
|
|
set v=%%k
|
|
set old_version=!v:"=!
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
IF %errlvl% == "1" (
|
|
echo can't locate git.exe - auto-versioning step won't be performed
|
|
|
|
:: if we haven't appversion.h, we need to create it
|
|
IF NOT "%old_version%" == "" (
|
|
set commitCount=0
|
|
)
|
|
)
|
|
|
|
::
|
|
:: Read major, minor and maintenance version components from version.h
|
|
::
|
|
IF EXIST "%srcdir%\version.h" (
|
|
FOR /F "usebackq tokens=1,2,3" %%i in ("%srcdir%\version.h") do (
|
|
IF %%i==#define (
|
|
IF %%j==VERSION_MAJOR set version_major=%%k
|
|
IF %%j==VERSION_MINOR set version_minor=%%k
|
|
)
|
|
)
|
|
)
|
|
|
|
::
|
|
:: Read revision and release date from it
|
|
::
|
|
IF NOT %errlvl% == "1" (
|
|
:: Get current branch
|
|
FOR /F "tokens=*" %%i IN ('"git -C "%repodir%\." rev-parse --abbrev-ref HEAD"') DO (
|
|
set branch_name=%%i
|
|
)
|
|
|
|
FOR /F "tokens=*" %%i IN ('"git -C "%repodir%\." rev-list --count !branch_name!"') DO (
|
|
IF NOT [%%i] == [] (
|
|
set commitCount=%%i
|
|
)
|
|
)
|
|
)
|
|
|
|
::
|
|
:: Get remote url repository
|
|
::
|
|
IF NOT %errlvl% == "1" (
|
|
|
|
set branch_remote=origin
|
|
:: Get remote name by current branch
|
|
FOR /F "tokens=*" %%i IN ('"git -C "%repodir%\." config branch.!branch_name!.remote"') DO (
|
|
set branch_remote=%%i
|
|
)
|
|
:: Get remote url
|
|
FOR /F "tokens=2 delims=@" %%i IN ('"git -C "%repodir%\." config remote.!branch_remote!.url"') DO (
|
|
set commitURL=%%i
|
|
)
|
|
:: Get commit id
|
|
FOR /F "tokens=*" %%i IN ('"git -C "%repodir%\." rev-parse --verify HEAD"') DO (
|
|
set shafull=%%i
|
|
set commitSHA=!shafull:~0,+7!
|
|
)
|
|
|
|
IF [!commitURL!] == [] (
|
|
|
|
FOR /F "tokens=1" %%i IN ('"git -C "%repodir%\." config remote.!branch_remote!.url"') DO (
|
|
set commitURL=%%i
|
|
)
|
|
|
|
:: strip .git
|
|
if "x!commitURL:~-4!"=="x.git" (
|
|
set commitURL=!commitURL:~0,-4!
|
|
)
|
|
|
|
:: append extra string
|
|
If NOT "!commitURL!"=="!commitURL:bitbucket.org=!" (
|
|
set commitURL=!commitURL!/commits/
|
|
) ELSE (
|
|
set commitURL=!commitURL!/commit/
|
|
)
|
|
|
|
) ELSE (
|
|
:: strip .git
|
|
if "x!commitURL:~-4!"=="x.git" (
|
|
set commitURL=!commitURL:~0,-4!
|
|
)
|
|
:: replace : to /
|
|
set commitURL=!commitURL::=/!
|
|
|
|
:: append extra string
|
|
If NOT "!commitURL!"=="!commitURL:bitbucket.org=!" (
|
|
set commitURL=https://!commitURL!/commits/
|
|
) ELSE (
|
|
set commitURL=https://!commitURL!/commit/
|
|
)
|
|
)
|
|
)
|
|
|
|
::
|
|
:: Detect local modifications
|
|
::
|
|
set localChanged=0
|
|
IF NOT %errlvl% == "1" (
|
|
FOR /F "tokens=*" %%i IN ('"git -C "%repodir%\." ls-files -m"') DO (
|
|
set localChanged=1
|
|
)
|
|
)
|
|
|
|
IF [%localChanged%]==[1] (
|
|
set version_modifed=+m
|
|
)
|
|
|
|
::
|
|
:: Now form full version string like 1.0.0.1
|
|
::
|
|
|
|
set new_version=%version_major%.%version_minor%.%commitCount%%version_modifed%
|
|
|
|
::
|
|
:: Update appversion.h if version has changed or modifications/mixed revisions detected
|
|
::
|
|
IF NOT "%new_version%"=="%old_version%" goto _update
|
|
goto _exit
|
|
|
|
:_update
|
|
echo Updating appversion.h, new version is "%new_version%", the old one was %old_version%
|
|
|
|
echo #ifndef __APPVERSION_H__>"%srcdir%\appversion.h"
|
|
echo #define __APPVERSION_H__>>"%srcdir%\appversion.h"
|
|
echo.>>"%srcdir%\appversion.h"
|
|
echo // >>"%srcdir%\appversion.h"
|
|
echo // This file is generated automatically.>>"%srcdir%\appversion.h"
|
|
echo // Don't edit it.>>"%srcdir%\appversion.h"
|
|
echo // >>"%srcdir%\appversion.h"
|
|
echo.>>"%srcdir%\appversion.h"
|
|
echo // Version defines>>"%srcdir%\appversion.h"
|
|
echo #define APP_VERSION "%new_version%">>"%srcdir%\appversion.h"
|
|
|
|
echo.>>"%srcdir%\appversion.h"
|
|
echo #define APP_COMMIT_DATE "%month% %DD% %YYYY%">>"%srcdir%\appversion.h"
|
|
echo #define APP_COMMIT_TIME "%hour%:%min%:%sec%">>"%srcdir%\appversion.h"
|
|
|
|
echo.>>"%srcdir%\appversion.h"
|
|
echo #define APP_COMMIT_SHA "%commitSHA%">>"%srcdir%\appversion.h"
|
|
echo #define APP_COMMIT_URL "%commitURL%">>"%srcdir%\appversion.h"
|
|
echo.>>"%srcdir%\appversion.h"
|
|
|
|
echo #endif //__APPVERSION_H__>>"%srcdir%\appversion.h"
|
|
echo.>>"%srcdir%\appversion.h"
|
|
|
|
:_exit
|
|
exit /B 0
|