这几天在写svnhook,需要用到bat,这里只记录下吧:
rem 检查tag
svnlook changed %REPOS% -t %TXN% | awk "{if(NR==1){str=$0}else{str=str\" \"$0}}END{print str}" | findstr "tags\/" > nul
if %errorlevel% == 0 (
svnlook log %REPOS% -t %TXN% | awk "{if(NR==1){str=$0}else{str=str\" \"$0}}END{print str}" | grep -E "^\[.{3}.*\]\[.{3}.*\].{10}.*" > nul
if %errorlevel% gtr 0 goto :err_action6
) else (
svnlook log %REPOS% -t %TXN% | awk "{if(NR==1){str=$0}else{str=str\" \"$0}}END{print str}" | grep -E "^\[.{3}.*\].{10}.*" > nul
if %errorlevel% gtr 0 goto :err_action5
)
上面的if子句中errorlevel一直拿不到正确的返回值,最后无奈,改成:
rem 检查tag
svnlook changed %REPOS% -t %TXN% | awk "{if(NR==1){str=$0}else{str=str\" \"$0}}END{print str}" | findstr "tags\/" > nul
if %errorlevel% == 0 (
::tag格式
:echo "tag --------------------" 1>&2
goto :tag_check
) else (
::非tag格式
:echo "no tag --------------------" 1>&2
goto :no_tag_check
)
:tag_check
svnlook log %REPOS% -t %TXN% | awk "{if(NR==1){str=$0}else{str=str\" \"$0}}END{print str}" | grep -E "^\[.{3}.*\]\[.{3}.*\].{10}.*" > nul
if %errorlevel% gtr 0 goto :err_action6
:no_tag_check
svnlook log %REPOS% -t %TXN% | awk "{if(NR==1){str=$0}else{str=str\" \"$0}}END{print str}" | grep -E "^\[.{3}.*\].{10}.*" > nul
if %errorlevel% gtr 0 goto :err_action5
备注:if子句的errorlevel拿不到正确的值,只能将子句goto出来,写在最外层

本文详细记录了在编写SVNHook过程中使用BAT脚本进行tag检查的具体实现方法,包括如何通过svnlook和awk命令处理SVN交易,以及在不同tag格式下采取的不同错误处理策略。
2680





