initNEW1-BASE.bat

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  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值