echo *********************************************************
echo 脚本功能:用于Jenkins多任务执行时,带时间参数的传递。
echo 脚本编写:
echo 编写时间: 2015.4.2
echo *********************************************************
rem 启用延后变量参数
setlocal EnableDelayedExpansion
echo ===========================主流程==========================================================
:main
call :init
rem 获取SVN日志
call :SvnLog
rem 依据SVNlog文件获取增删改文件并作格式转换
call :ChangeLOG
rem 获取路径、删除重复行
call :DellDouble
rem 编译工程
call :Compile
rem 判断是否编译基础
call :Judge
rem 传参数写入到本次集成内容.txt中
call :WriteParam
goto :eof
exit /b
echo ==========================初始化===================================================
:init
rem 升级包名称
set t=%Time%
if "%t:~0,1%" ==" " (
set t=0%t:~1%
)
set AresProject=%AresProject%
set LogDir=%Workspace%\log\%date:~0,4%%date:~5,2%%date:~8,2%.%t:~0,2%%t:~3,2%
set VersionNumber=%AresProject%
set VersionNum=UFT_20160122
set Version=%Version%
echo set LogDir=%Workspace%\log\%date:~0,4%%date:~5,2%%date:~8,2%.%t:~0,2%%t:~3,2%>%workspace%\initTMP.bat
echo set PackName=%date:~0,4%%date:~5,2%%date:~8,2%.%t:~0,2%%t:~3,2%(BASE)_%Version%>>%workspace%\initTMP.bat
echo set Version=%Version%>>%workspace%\initTMP.bat
echo set versionDate=%Version:~4,8%>>%workspace%\initTMP.bat
echo set VersionNum=%VersionNum%>>%workspace%\initTMP.bat
echo set VersionNumber=%AresProject%>>%workspace%\initTMP.bat
echo set AresProject=%AresProject%>>%workspace%\initTMP.bat
echo set BaseAresData=%BaseAresData%>>%workspace%\initTMP.bat
echo set BaseAresPath=%BaseAresPath%>>%workspace%\initTMP.bat
echo set BaseCompileUser=%BaseCompileUser%>>%workspace%\initTMP.bat
set VersionBasepath=%VersionBasepath%
echo set VersionBasepath=%VersionBasepath%>>%workspace%\initTMP.bat
rem 当本次base集成内容.txt不存在时,提示报错。
rem if exist %Workspace%\临时补丁集成内容\本次集成内容.txt (
rem copy /y %Workspace%\临时补丁集成内容\本次集成内容.txt %Workspace%\本次集成内容.bat
rem call %Workspace%\本次集成内容.bat
rem ) else (
rem echo %Workspace%\临时补丁集成内容\本次集成内容.txt不存在
rem exit 1
rem)
echo 创建日志目录
if not exist %LogDir% mkdir %LogDir%
set Srcdir=%workspace%
set VersionBasepath=%VersionBasepath%
goto :eof
echo ==========================获取SVN日志===================================================
:SvnLog
rem 获取日志前再做一次SVN更新,避免Jenkins更新时有递交,漏掉这部分的编译
svn update %workspace%\base\Run
svn update %workspace%\base\Sources\appcom
svn update %workspace%\base\Sources\Client
svn update %workspace%\base\Sources\mc
svn update %workspace%\base\Sources\O4_Ares_studio
svn update %workspace%\base\Sources\Script
svn update %workspace%\base\Sources\Src
rem 备份上次集成SVN版本
copy /y %LogDir%\..\上次集成SVN版本.txt %LogDir%
rem 获取上次集成基础程序版本SVN版本
for /f "tokens=1 delims='基础程序版本:'" %%i in ('find "基础程序版本:" %LogDir%\上次集成SVN版本.txt') do (
set aa=%%i
set aa=!aa:--=!
if !aa! EQU %%i (
set LastBaseVersion=%%i
)
)
rem 获取当前基础程序SVN版本信息
svn info https://cm06.hundsun.com/deptones/AMDep/O4/base%VersionBasepath% > %LogDir%\svninfo_base.txt
for /f "tokens=1 delims=" %%i in ('find "Last Changed Rev: " %LogDir%\svninfo_base.txt') do (
set fver=%%i
set fver=!fver:Last Changed Rev: =!
if "!fver!" NEQ "%%i" (
echo 基础程序版本:!fver!>%LogDir%\本次集成SVN版本.txt
set NowBaseVersion=!fver!
rem 如果开始不编译前台参数,那么上次集成版本报错不变。
rem 本次集成版本+1作为下次集成版本,避免下次集成包含本次修改
set /a fver=!fver!+1
echo 基础程序版本:!fver!>%LogDir%\..\上次集成SVN版本.txt
)
)
rem 获取svnlog
if %NowBaseVersion% GEQ %LastBaseVersion% (
svn.exe log https://cm06.hundsun.com/deptones/AMDep/O4/base%VersionBasepath% --revision %LastBaseVersion%:%NowBaseVersion% --username hs\o4cm --password trade32@wu --verbose --trust-server-cert --non-interactive > %Logdir%\svnlog_base.txt 2>%Logdir%\svnlog_error.txt
)
rem 检查获取日志时是否报错,如果报错立即退出
type %Logdir%\svnlog_error.txt|find "svn: E"
if "%errorlevel%" EQU "0" (
echo 获取svnlog时报错,请配管检查!!!>%LogDir%\..\today.txt
exit 1
)
rem 获取svnlog不报错,即将svnlog_error.txt删除
rem if exist %Logdir%\svnlog_error.txt del /q %Logdir%\svnlog_error.txt
rem 去除配管递交的基础SVNlog,包括“版本信息.txt”的提交
set n=0
for /f "tokens=* delims=" %%i in (%LogDir%\svnlog_base.txt) do (
set aa=%%i
if !n! EQU 0 (
set aa=!aa: o4cm =!
set aa=!aa: wanghb =!
set aa=!aa: liting =!
set aa=!aa:/版本信息=!
if "!aa!" EQU "%%i" (
echo !aa!>>%LogDir%\svnlog_base1.txt
) else (
set /a n+=1)
) else (
set aa=!aa:-----=!
if "!aa!" NEQ "%%i" (set /a n-=1))
)
move /y %LogDir%\svnlog_base1.txt %LogDir%\svnlog_base.txt
rem 获取日志后再做一次SVN更新,避免获取SVN日志时有递交,漏掉这部分的编译
svn update %workspace%\base\Run
svn update %workspace%\base\Sources\appcom
svn update %workspace%\base\Sources\Client
svn update %workspace%\base\Sources\mc
svn update %workspace%\base\Sources\O4_Ares_studio
svn update %workspace%\base\Sources\Script
svn update %workspace%\base\Sources\Src
goto :eof
echo =========================依据SVNlog文件获取增删改文件并作格式转换=========================
:ChangeLOG
if exist %Logdir%\modify_base.txt del /q %Logdir%\modify_base.txt
if exist %Logdir%\add_base.txt del /q %Logdir%\add_base.txt
if exist %Logdir%\delete_base.txt del /q %Logdir%\delete_base.txt
rem 依据svnlog_base.txt文件获取增删改文件,转化成本地源码格式的目录,包括替换" M "、"branches/"等
for /f "tokens=* delims=" %%i in (%Logdir%\svnlog_base.txt) do (
set aa=%%i
set aa=!aa: M =%Srcdir%!
if "!aa!" NEQ "%%i" (
set aa=!aa:%VersionBasepath%=!
set aa=!aa:/=\!
set aa=!aa:\base\Sources\O4_Ares_studio\O4\metadata\datatype.datatype=!
echo !aa!>>%Logdir%\modify_base.txt
)
set bb=%%i
set bb=!bb: A =%Srcdir%!
if "!bb!" NEQ "%%i" (
set bb=!bb:%VersionBasepath%=!
set bb=!bb:/=\!
set bb=!bb:\base\Sources\O4_Ares_studio\O4\metadata\datatype.datatype=!
echo !bb!>>%Logdir%\add_base.txt
)
set cc=%%i
set cc=!cc: D =%Srcdir%!
if "!cc!" NEQ "%%i" (
set cc=!cc:%VersionBasepath%=!
set cc=!cc:/=\!
set cc=!cc:\base\Sources\O4_Ares_studio\O4\metadata\datatype.datatype=!
echo !cc!>>%Logdir%\delete_base.txt
)
)
rem 去除modify_base.txt重复行
for /f "tokens=* delims=" %%i in (%Logdir%\modify_base.txt) do (
call :a1 "%%i"
)
move /y %Logdir%\tmp.txt %Logdir%\modify_base.txt
rem 去除modify_base.txt逗号
call :a2 %Logdir%\modify_base.txt
rem 去除add_base.txt重复行
for /f "tokens=* delims=" %%i in (%Logdir%\add_base.txt) do (
call :a1 "%%i"
)
move /y %Logdir%\tmp.txt %Logdir%\add_base.txt
rem 去除add_baseClient.txt逗号
call :a2 %Logdir%\add_base.txt
rem 如果不存在增、删、改,直接退出
if not exist %Logdir%\modify_base.txt (
if not exist %Logdir%\add_base.txt (
if not exist %Logdir%\delete_base.txt (
echo 本次基础编译无修改,请忽略!!!>%Logdir%\..\today.txt
rem 传参数写入到本次集成内容.txt中
call :WriteParam
exit 0
)
)
)
goto :eof
echo ===============================获取路径、删除重复行=======================================================
:DellDouble
rem 生成汇总日志文件today.txt
echo.>%Logdir%\..\today.txt
echo 本次编译结果如下:>>%Logdir%\..\today.txt
echo ====================================================================================================>>%Logdir%\..\today.txt
echo.>>%Logdir%\..\today.txt
rem 依据修改的文件,获取对应的路径。后续编译时,需要引用到此路径。
if exist %Logdir%\modify_base_path.txt del /q %Logdir%\modify_base_path.txt
if exist %Logdir%\add_base_path.txt del /q %Logdir%\add_base_path.txt
if exist %Logdir%\delete_base_path.txt del /q %Logdir%\delete_base_path.txt
rem 修改文件处理modify_base.txt
if exist %Logdir%\modify_base.txt (
rem 去除不需要编译前台的目录
for /f "tokens=* delims=" %%i in (%Logdir%\modify_base.txt) do (
set aa=%%i
set aa=!aa:%Srcdir%\base\Run\ar2.0_win=!
set aa=!aa:%Srcdir%\base\Run\base=!
set aa=!aa:%Srcdir%\base\Run\base_20150313=!
set aa=!aa:%Srcdir%\base\Run\buildscript=!
set aa=!aa:%Srcdir%\base\Run\Inno Setup 5=!
set aa=!aa:%Srcdir%\base\Run\SetupScript=!
if "!aa!" EQU "%%i" (
echo %%i>>%Logdir%\modify_base_path.txt
)
)
rem 获取路径
for /f "tokens=* delims=" %%i in (%Logdir%\modify_base_path.txt) do (
@echo %%~dpi>>%Logdir%\modifypath1.txt
)
move /y %Logdir%\modifypath1.txt %Logdir%\modify_base_path.txt
rem 去除重复行
for /f "tokens=* delims=" %%i in (%Logdir%\modify_base_path.txt) do (
call :a1 "%%i"
)
move /y %Logdir%\tmp.txt %Logdir%\modify_base_path.txt
rem 去除逗号
call :a2 %Logdir%\modify_base_path.txt
)
rem 增加文件处理add_base.txt
if exist %Logdir%\add_base.txt (
for /f "tokens=* delims=" %%i in (%Logdir%\add_base.txt) do (
set aa=%%i
set aa=!aa:%Srcdir%\base\Run\ar2.0_win=!
set aa=!aa:%Srcdir%\base\Run\base=!
set aa=!aa:%Srcdir%\base\Run\base_20150313=!
set aa=!aa:%Srcdir%\base\Run\buildscript=!
set aa=!aa:%Srcdir%\base\Run\Inno Setup 5=!
set aa=!aa:%Srcdir%\base\Run\SetupScript=!
if "!aa!" EQU "%%i" (
echo %%i>>%Logdir%\add_base_path.txt
)
)
rem 获取路径
for /f "tokens=* delims=" %%i in (%Logdir%\add_base_path.txt) do (
@echo %%~dpi>>%Logdir%\addpath1.txt
)
move /y %Logdir%\addpath1.txt %Logdir%\add_base_path.txt
rem 去除重复行
for /f "tokens=* delims=" %%i in (%Logdir%\add_base_path.txt) do (
call :a1 "%%i"
)
move /y %Logdir%\tmp.txt %Logdir%\add_base_path.txt
rem 去除逗号
call :a2 %Logdir%\add_base_path.txt
)
rem 删除文件处理delete_base.txt
if exist %Logdir%\delete_base.txt (
rem 去除不需要编译前台的目录
for /f "tokens=* delims=" %%i in (%Logdir%\delete_base.txt) do (
set aa=%%i
set aa=!aa:%Srcdir%\base\Run\ar2.0_win=!
set aa=!aa:%Srcdir%\base\Run\base=!
set aa=!aa:%Srcdir%\base\Run\base_20150313=!
set aa=!aa:%Srcdir%\base\Run\buildscript=!
set aa=!aa:%Srcdir%\base\Run\Inno Setup 5=!
set aa=!aa:%Srcdir%\base\Run\SetupScript=!
if "!aa!" EQU "%%i" (
echo %%i>>%Logdir%\delete_base_path.txt
)
)
rem 获取路径
for /f "tokens=* delims=" %%i in (%Logdir%\delete_base_path.txt) do (
@echo %%~dpi>>%Logdir%\deletepath1.txt
)
move /y %Logdir%\deletepath1.txt %Logdir%\delete_base_path.txt
rem 去除重复行
for /f "tokens=* delims=" %%i in (%Logdir%\delete_base_path.txt) do (
call :a1 "%%i"
)
move /y %Logdir%\tmp.txt %Logdir%\delete_base_path.txt
rem 去除逗号
call :a2 %Logdir%\delete_base_path.txt
)
goto :eof
rem 去除重复行函数
:a1
rem 去引号,结尾加上中文句号,解决有包含关系的路径会被过滤的问题,比如d:\123\12、d:\123\
set abc=%~1。
rem 去空格
set abc=%abc: =%
find "%abc%" %Logdir%\tmp.txt >nul 2>nul && goto :eof
@echo %abc%>>%Logdir%\tmp.txt
goto :eof
rem 去除文件中的中文句号
:a2
rem 去除逗号
for /f "tokens=* delims=" %%i in (%1) do (
set aa=%%i
set aa=!aa:。=!
echo !aa!>>%Logdir%\tmp1.txt
)
move /y %Logdir%\tmp1.txt %1
goto :eof
echo ================================编译工程==================================================================
:Compile
rem Part1. 编译 检查获取基础日志时是否有修改,如果有修改将baseSrc设置为true
for %%a in (modify_base_path.txt,add_base_path.txt,delete_base_path.txt) do (
if exist %Logdir%\%%a (
for /f "tokens=* delims=" %%i in (%Logdir%\%%a) do (
type %Logdir%\%%a |find "\base\Sources\O4_Ares_studio\O4\"
if !errorlevel! EQU 0 (
rem [baseSrc]:当有基础编译修改代码时填“true”,没有修改时填“false”
echo [baseSrc]:基础编译>>%workspace%\initTMP.bat
echo set baseSrc=true>>%workspace%\initTMP.bat
echo [U_Client]:前台编译>>%workspace%\initTMP.bat
echo set U_Client=true>>%workspace%\initTMP.bat
)
)
)
)
for %%a in (modify_base_path.txt,add_base_path.txt,delete_base_path.txt) do (
if exist %Logdir%\%%a (
for /f "tokens=* delims=" %%i in (%Logdir%\%%a) do (
type %Logdir%\%%a |find "\base\Sources\Client\"
if !errorlevel! EQU 0 (
rem [baseSrc]:当有基础编译修改代码时填“true”,没有修改时填“false”
echo [baseSrc]:基础编译>>%workspace%\initTMP.bat
echo set baseSrc=true>>%workspace%\initTMP.bat
echo [U_Client]:前台编译>>%workspace%\initTMP.bat
echo set U_Client=true>>%workspace%\initTMP.bat
)
)
)
)
rem 去除重复行
for /f "tokens=* delims=" %%i in (%workspace%\initTMP.bat) do (
call :a11 "%%i"
)
move /y %Logdir%\tmp.txt %workspace%\initTMP.bat
rem 去除逗号
call :a22 %workspace%\initTMP.bat
goto :eof
rem 去除重复行函数
:a11
rem 去引号,结尾加上中文句号,解决有包含关系的路径会被过滤的问题,比如d:\123\12、d:\123\
set abc=%~1。
find "%abc%" %Logdir%\tmp.txt >nul 2>nul && goto :eof
@echo %abc%>>%Logdir%\tmp.txt
goto :eof
rem 去除文件中的中文句号
:a22
rem 去除逗号
for /f "tokens=* delims=" %%i in (%1) do (
set aa=%%i
set aa=!aa:。=!
echo !aa!>>%Logdir%\tmp1.txt
)
move /y %Logdir%\tmp1.txt %1
goto :eof
rem 判断是否编译基础
:Judge
call %workspace%\initTMP.bat
rem 判断是否有基础代码变更
if "%BaseSrc%" equ "true" (
rem 导出真代码
call %Workspace%\autopack\BASE_20160122_LS\autopackstepARES1-BASE.bat
rem 编译代码
call %Workspace%\autopack\BASE_20160122_LS\autopackstepCompile-BASE.bat
) else (
echo BaseSrc=%BaseSrc%
echo 基础代码无编译
)
goto :eof
rem 传参数写入到本次集成内容.txt中
:WriteParam
rem 传入本次编译Version版本号,和AresProject
echo.>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set Version=%Version%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set versionDate=%Version:~4,8%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set VersionNumber=%AresProject%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set VersionNum=%VersionNum%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set AresProject=%AresProject%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set BaseAresData=%BaseAresData%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set BaseAresPath=%BaseAresPath%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set BaseCompileUser=%BaseCompileUser%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set BaseSrc=%BaseSrc%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set U_Client=%U_Client%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
svn commit -m "提交修改单号:M200000000000 修改说明:将本次编译Version版本号,和AresProject写入到修改本次集成内容.txt中" %Workspace%\临时补丁集成内容\本次集成内容.txt>>%Logdir%\svnlog_commit.log 2>&1
@ping 127.1 /n 100 >nul
goto :eof
echo 脚本功能:用于Jenkins多任务执行时,带时间参数的传递。
echo 脚本编写:
echo 编写时间: 2015.4.2
echo *********************************************************
rem 启用延后变量参数
setlocal EnableDelayedExpansion
echo ===========================主流程==========================================================
:main
call :init
rem 获取SVN日志
call :SvnLog
rem 依据SVNlog文件获取增删改文件并作格式转换
call :ChangeLOG
rem 获取路径、删除重复行
call :DellDouble
rem 编译工程
call :Compile
rem 判断是否编译基础
call :Judge
rem 传参数写入到本次集成内容.txt中
call :WriteParam
goto :eof
exit /b
echo ==========================初始化===================================================
:init
rem 升级包名称
set t=%Time%
if "%t:~0,1%" ==" " (
set t=0%t:~1%
)
set AresProject=%AresProject%
set LogDir=%Workspace%\log\%date:~0,4%%date:~5,2%%date:~8,2%.%t:~0,2%%t:~3,2%
set VersionNumber=%AresProject%
set VersionNum=UFT_20160122
set Version=%Version%
echo set LogDir=%Workspace%\log\%date:~0,4%%date:~5,2%%date:~8,2%.%t:~0,2%%t:~3,2%>%workspace%\initTMP.bat
echo set PackName=%date:~0,4%%date:~5,2%%date:~8,2%.%t:~0,2%%t:~3,2%(BASE)_%Version%>>%workspace%\initTMP.bat
echo set Version=%Version%>>%workspace%\initTMP.bat
echo set versionDate=%Version:~4,8%>>%workspace%\initTMP.bat
echo set VersionNum=%VersionNum%>>%workspace%\initTMP.bat
echo set VersionNumber=%AresProject%>>%workspace%\initTMP.bat
echo set AresProject=%AresProject%>>%workspace%\initTMP.bat
echo set BaseAresData=%BaseAresData%>>%workspace%\initTMP.bat
echo set BaseAresPath=%BaseAresPath%>>%workspace%\initTMP.bat
echo set BaseCompileUser=%BaseCompileUser%>>%workspace%\initTMP.bat
set VersionBasepath=%VersionBasepath%
echo set VersionBasepath=%VersionBasepath%>>%workspace%\initTMP.bat
rem 当本次base集成内容.txt不存在时,提示报错。
rem if exist %Workspace%\临时补丁集成内容\本次集成内容.txt (
rem copy /y %Workspace%\临时补丁集成内容\本次集成内容.txt %Workspace%\本次集成内容.bat
rem call %Workspace%\本次集成内容.bat
rem ) else (
rem echo %Workspace%\临时补丁集成内容\本次集成内容.txt不存在
rem exit 1
rem)
echo 创建日志目录
if not exist %LogDir% mkdir %LogDir%
set Srcdir=%workspace%
set VersionBasepath=%VersionBasepath%
goto :eof
echo ==========================获取SVN日志===================================================
:SvnLog
rem 获取日志前再做一次SVN更新,避免Jenkins更新时有递交,漏掉这部分的编译
svn update %workspace%\base\Run
svn update %workspace%\base\Sources\appcom
svn update %workspace%\base\Sources\Client
svn update %workspace%\base\Sources\mc
svn update %workspace%\base\Sources\O4_Ares_studio
svn update %workspace%\base\Sources\Script
svn update %workspace%\base\Sources\Src
rem 备份上次集成SVN版本
copy /y %LogDir%\..\上次集成SVN版本.txt %LogDir%
rem 获取上次集成基础程序版本SVN版本
for /f "tokens=1 delims='基础程序版本:'" %%i in ('find "基础程序版本:" %LogDir%\上次集成SVN版本.txt') do (
set aa=%%i
set aa=!aa:--=!
if !aa! EQU %%i (
set LastBaseVersion=%%i
)
)
rem 获取当前基础程序SVN版本信息
svn info https://cm06.hundsun.com/deptones/AMDep/O4/base%VersionBasepath% > %LogDir%\svninfo_base.txt
for /f "tokens=1 delims=" %%i in ('find "Last Changed Rev: " %LogDir%\svninfo_base.txt') do (
set fver=%%i
set fver=!fver:Last Changed Rev: =!
if "!fver!" NEQ "%%i" (
echo 基础程序版本:!fver!>%LogDir%\本次集成SVN版本.txt
set NowBaseVersion=!fver!
rem 如果开始不编译前台参数,那么上次集成版本报错不变。
rem 本次集成版本+1作为下次集成版本,避免下次集成包含本次修改
set /a fver=!fver!+1
echo 基础程序版本:!fver!>%LogDir%\..\上次集成SVN版本.txt
)
)
rem 获取svnlog
if %NowBaseVersion% GEQ %LastBaseVersion% (
svn.exe log https://cm06.hundsun.com/deptones/AMDep/O4/base%VersionBasepath% --revision %LastBaseVersion%:%NowBaseVersion% --username hs\o4cm --password trade32@wu --verbose --trust-server-cert --non-interactive > %Logdir%\svnlog_base.txt 2>%Logdir%\svnlog_error.txt
)
rem 检查获取日志时是否报错,如果报错立即退出
type %Logdir%\svnlog_error.txt|find "svn: E"
if "%errorlevel%" EQU "0" (
echo 获取svnlog时报错,请配管检查!!!>%LogDir%\..\today.txt
exit 1
)
rem 获取svnlog不报错,即将svnlog_error.txt删除
rem if exist %Logdir%\svnlog_error.txt del /q %Logdir%\svnlog_error.txt
rem 去除配管递交的基础SVNlog,包括“版本信息.txt”的提交
set n=0
for /f "tokens=* delims=" %%i in (%LogDir%\svnlog_base.txt) do (
set aa=%%i
if !n! EQU 0 (
set aa=!aa: o4cm =!
set aa=!aa: wanghb =!
set aa=!aa: liting =!
set aa=!aa:/版本信息=!
if "!aa!" EQU "%%i" (
echo !aa!>>%LogDir%\svnlog_base1.txt
) else (
set /a n+=1)
) else (
set aa=!aa:-----=!
if "!aa!" NEQ "%%i" (set /a n-=1))
)
move /y %LogDir%\svnlog_base1.txt %LogDir%\svnlog_base.txt
rem 获取日志后再做一次SVN更新,避免获取SVN日志时有递交,漏掉这部分的编译
svn update %workspace%\base\Run
svn update %workspace%\base\Sources\appcom
svn update %workspace%\base\Sources\Client
svn update %workspace%\base\Sources\mc
svn update %workspace%\base\Sources\O4_Ares_studio
svn update %workspace%\base\Sources\Script
svn update %workspace%\base\Sources\Src
goto :eof
echo =========================依据SVNlog文件获取增删改文件并作格式转换=========================
:ChangeLOG
if exist %Logdir%\modify_base.txt del /q %Logdir%\modify_base.txt
if exist %Logdir%\add_base.txt del /q %Logdir%\add_base.txt
if exist %Logdir%\delete_base.txt del /q %Logdir%\delete_base.txt
rem 依据svnlog_base.txt文件获取增删改文件,转化成本地源码格式的目录,包括替换" M "、"branches/"等
for /f "tokens=* delims=" %%i in (%Logdir%\svnlog_base.txt) do (
set aa=%%i
set aa=!aa: M =%Srcdir%!
if "!aa!" NEQ "%%i" (
set aa=!aa:%VersionBasepath%=!
set aa=!aa:/=\!
set aa=!aa:\base\Sources\O4_Ares_studio\O4\metadata\datatype.datatype=!
echo !aa!>>%Logdir%\modify_base.txt
)
set bb=%%i
set bb=!bb: A =%Srcdir%!
if "!bb!" NEQ "%%i" (
set bb=!bb:%VersionBasepath%=!
set bb=!bb:/=\!
set bb=!bb:\base\Sources\O4_Ares_studio\O4\metadata\datatype.datatype=!
echo !bb!>>%Logdir%\add_base.txt
)
set cc=%%i
set cc=!cc: D =%Srcdir%!
if "!cc!" NEQ "%%i" (
set cc=!cc:%VersionBasepath%=!
set cc=!cc:/=\!
set cc=!cc:\base\Sources\O4_Ares_studio\O4\metadata\datatype.datatype=!
echo !cc!>>%Logdir%\delete_base.txt
)
)
rem 去除modify_base.txt重复行
for /f "tokens=* delims=" %%i in (%Logdir%\modify_base.txt) do (
call :a1 "%%i"
)
move /y %Logdir%\tmp.txt %Logdir%\modify_base.txt
rem 去除modify_base.txt逗号
call :a2 %Logdir%\modify_base.txt
rem 去除add_base.txt重复行
for /f "tokens=* delims=" %%i in (%Logdir%\add_base.txt) do (
call :a1 "%%i"
)
move /y %Logdir%\tmp.txt %Logdir%\add_base.txt
rem 去除add_baseClient.txt逗号
call :a2 %Logdir%\add_base.txt
rem 如果不存在增、删、改,直接退出
if not exist %Logdir%\modify_base.txt (
if not exist %Logdir%\add_base.txt (
if not exist %Logdir%\delete_base.txt (
echo 本次基础编译无修改,请忽略!!!>%Logdir%\..\today.txt
rem 传参数写入到本次集成内容.txt中
call :WriteParam
exit 0
)
)
)
goto :eof
echo ===============================获取路径、删除重复行=======================================================
:DellDouble
rem 生成汇总日志文件today.txt
echo.>%Logdir%\..\today.txt
echo 本次编译结果如下:>>%Logdir%\..\today.txt
echo ====================================================================================================>>%Logdir%\..\today.txt
echo.>>%Logdir%\..\today.txt
rem 依据修改的文件,获取对应的路径。后续编译时,需要引用到此路径。
if exist %Logdir%\modify_base_path.txt del /q %Logdir%\modify_base_path.txt
if exist %Logdir%\add_base_path.txt del /q %Logdir%\add_base_path.txt
if exist %Logdir%\delete_base_path.txt del /q %Logdir%\delete_base_path.txt
rem 修改文件处理modify_base.txt
if exist %Logdir%\modify_base.txt (
rem 去除不需要编译前台的目录
for /f "tokens=* delims=" %%i in (%Logdir%\modify_base.txt) do (
set aa=%%i
set aa=!aa:%Srcdir%\base\Run\ar2.0_win=!
set aa=!aa:%Srcdir%\base\Run\base=!
set aa=!aa:%Srcdir%\base\Run\base_20150313=!
set aa=!aa:%Srcdir%\base\Run\buildscript=!
set aa=!aa:%Srcdir%\base\Run\Inno Setup 5=!
set aa=!aa:%Srcdir%\base\Run\SetupScript=!
if "!aa!" EQU "%%i" (
echo %%i>>%Logdir%\modify_base_path.txt
)
)
rem 获取路径
for /f "tokens=* delims=" %%i in (%Logdir%\modify_base_path.txt) do (
@echo %%~dpi>>%Logdir%\modifypath1.txt
)
move /y %Logdir%\modifypath1.txt %Logdir%\modify_base_path.txt
rem 去除重复行
for /f "tokens=* delims=" %%i in (%Logdir%\modify_base_path.txt) do (
call :a1 "%%i"
)
move /y %Logdir%\tmp.txt %Logdir%\modify_base_path.txt
rem 去除逗号
call :a2 %Logdir%\modify_base_path.txt
)
rem 增加文件处理add_base.txt
if exist %Logdir%\add_base.txt (
for /f "tokens=* delims=" %%i in (%Logdir%\add_base.txt) do (
set aa=%%i
set aa=!aa:%Srcdir%\base\Run\ar2.0_win=!
set aa=!aa:%Srcdir%\base\Run\base=!
set aa=!aa:%Srcdir%\base\Run\base_20150313=!
set aa=!aa:%Srcdir%\base\Run\buildscript=!
set aa=!aa:%Srcdir%\base\Run\Inno Setup 5=!
set aa=!aa:%Srcdir%\base\Run\SetupScript=!
if "!aa!" EQU "%%i" (
echo %%i>>%Logdir%\add_base_path.txt
)
)
rem 获取路径
for /f "tokens=* delims=" %%i in (%Logdir%\add_base_path.txt) do (
@echo %%~dpi>>%Logdir%\addpath1.txt
)
move /y %Logdir%\addpath1.txt %Logdir%\add_base_path.txt
rem 去除重复行
for /f "tokens=* delims=" %%i in (%Logdir%\add_base_path.txt) do (
call :a1 "%%i"
)
move /y %Logdir%\tmp.txt %Logdir%\add_base_path.txt
rem 去除逗号
call :a2 %Logdir%\add_base_path.txt
)
rem 删除文件处理delete_base.txt
if exist %Logdir%\delete_base.txt (
rem 去除不需要编译前台的目录
for /f "tokens=* delims=" %%i in (%Logdir%\delete_base.txt) do (
set aa=%%i
set aa=!aa:%Srcdir%\base\Run\ar2.0_win=!
set aa=!aa:%Srcdir%\base\Run\base=!
set aa=!aa:%Srcdir%\base\Run\base_20150313=!
set aa=!aa:%Srcdir%\base\Run\buildscript=!
set aa=!aa:%Srcdir%\base\Run\Inno Setup 5=!
set aa=!aa:%Srcdir%\base\Run\SetupScript=!
if "!aa!" EQU "%%i" (
echo %%i>>%Logdir%\delete_base_path.txt
)
)
rem 获取路径
for /f "tokens=* delims=" %%i in (%Logdir%\delete_base_path.txt) do (
@echo %%~dpi>>%Logdir%\deletepath1.txt
)
move /y %Logdir%\deletepath1.txt %Logdir%\delete_base_path.txt
rem 去除重复行
for /f "tokens=* delims=" %%i in (%Logdir%\delete_base_path.txt) do (
call :a1 "%%i"
)
move /y %Logdir%\tmp.txt %Logdir%\delete_base_path.txt
rem 去除逗号
call :a2 %Logdir%\delete_base_path.txt
)
goto :eof
rem 去除重复行函数
:a1
rem 去引号,结尾加上中文句号,解决有包含关系的路径会被过滤的问题,比如d:\123\12、d:\123\
set abc=%~1。
rem 去空格
set abc=%abc: =%
find "%abc%" %Logdir%\tmp.txt >nul 2>nul && goto :eof
@echo %abc%>>%Logdir%\tmp.txt
goto :eof
rem 去除文件中的中文句号
:a2
rem 去除逗号
for /f "tokens=* delims=" %%i in (%1) do (
set aa=%%i
set aa=!aa:。=!
echo !aa!>>%Logdir%\tmp1.txt
)
move /y %Logdir%\tmp1.txt %1
goto :eof
echo ================================编译工程==================================================================
:Compile
rem Part1. 编译 检查获取基础日志时是否有修改,如果有修改将baseSrc设置为true
for %%a in (modify_base_path.txt,add_base_path.txt,delete_base_path.txt) do (
if exist %Logdir%\%%a (
for /f "tokens=* delims=" %%i in (%Logdir%\%%a) do (
type %Logdir%\%%a |find "\base\Sources\O4_Ares_studio\O4\"
if !errorlevel! EQU 0 (
rem [baseSrc]:当有基础编译修改代码时填“true”,没有修改时填“false”
echo [baseSrc]:基础编译>>%workspace%\initTMP.bat
echo set baseSrc=true>>%workspace%\initTMP.bat
echo [U_Client]:前台编译>>%workspace%\initTMP.bat
echo set U_Client=true>>%workspace%\initTMP.bat
)
)
)
)
for %%a in (modify_base_path.txt,add_base_path.txt,delete_base_path.txt) do (
if exist %Logdir%\%%a (
for /f "tokens=* delims=" %%i in (%Logdir%\%%a) do (
type %Logdir%\%%a |find "\base\Sources\Client\"
if !errorlevel! EQU 0 (
rem [baseSrc]:当有基础编译修改代码时填“true”,没有修改时填“false”
echo [baseSrc]:基础编译>>%workspace%\initTMP.bat
echo set baseSrc=true>>%workspace%\initTMP.bat
echo [U_Client]:前台编译>>%workspace%\initTMP.bat
echo set U_Client=true>>%workspace%\initTMP.bat
)
)
)
)
rem 去除重复行
for /f "tokens=* delims=" %%i in (%workspace%\initTMP.bat) do (
call :a11 "%%i"
)
move /y %Logdir%\tmp.txt %workspace%\initTMP.bat
rem 去除逗号
call :a22 %workspace%\initTMP.bat
goto :eof
rem 去除重复行函数
:a11
rem 去引号,结尾加上中文句号,解决有包含关系的路径会被过滤的问题,比如d:\123\12、d:\123\
set abc=%~1。
find "%abc%" %Logdir%\tmp.txt >nul 2>nul && goto :eof
@echo %abc%>>%Logdir%\tmp.txt
goto :eof
rem 去除文件中的中文句号
:a22
rem 去除逗号
for /f "tokens=* delims=" %%i in (%1) do (
set aa=%%i
set aa=!aa:。=!
echo !aa!>>%Logdir%\tmp1.txt
)
move /y %Logdir%\tmp1.txt %1
goto :eof
rem 判断是否编译基础
:Judge
call %workspace%\initTMP.bat
rem 判断是否有基础代码变更
if "%BaseSrc%" equ "true" (
rem 导出真代码
call %Workspace%\autopack\BASE_20160122_LS\autopackstepARES1-BASE.bat
rem 编译代码
call %Workspace%\autopack\BASE_20160122_LS\autopackstepCompile-BASE.bat
) else (
echo BaseSrc=%BaseSrc%
echo 基础代码无编译
)
goto :eof
rem 传参数写入到本次集成内容.txt中
:WriteParam
rem 传入本次编译Version版本号,和AresProject
echo.>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set Version=%Version%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set versionDate=%Version:~4,8%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set VersionNumber=%AresProject%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set VersionNum=%VersionNum%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set AresProject=%AresProject%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set BaseAresData=%BaseAresData%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set BaseAresPath=%BaseAresPath%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set BaseCompileUser=%BaseCompileUser%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set BaseSrc=%BaseSrc%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
echo set U_Client=%U_Client%>>%Workspace%\临时补丁集成内容\本次集成内容.txt
svn commit -m "提交修改单号:M200000000000 修改说明:将本次编译Version版本号,和AresProject写入到修改本次集成内容.txt中" %Workspace%\临时补丁集成内容\本次集成内容.txt>>%Logdir%\svnlog_commit.log 2>&1
@ping 127.1 /n 100 >nul
goto :eof