为了维护svn的log,方便后续查找某个模块的svn提交操作,今天终于动手写了一次svn的hook脚本。虽说功能不复杂,但是经历还是有点波折。特此记录
目标:输入的注释要遵照格式:[模块名]操作日志,其中模块名不少于4个字符(或2个汉字),操作日志不少于10个字符(或5个汉字)
由于公司的svnserver是在windows机器上,所以需要编辑pre-commit.bat
::/
@echo off
setlocal
set REPOS=%1
set TXN=%2
::svnlook log %REPOS% -t %TXN% | awk "{if(NR==1){str=$0}else{str=str\" \"$0}}END{print str}" 1>&2
::rem 保证输入8个字符
::svnlook log %REPOS% -t %TXN% | findstr "........" > nul
::if %errorlevel% gtr 0 goto :err_action
rem 按照格式输入
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_action1
rem 过滤空格字符
svnlook log %REPOS% -t %TXN% | findstr /ic:" " > nul
if %errorlevel% gtr 0 goto :success
:::err_action
::echo 输入的注释不少于 8 个字符说明(或 4 个汉字) >&2
:err_action1
echo 输入的注释要遵照格式:[模块名]操作日志,其中模块名不少于4个字符(或2个汉字),操作日志不少于10个字符(或5个汉字) >&2
goto :err_exit
:err_exit
exit 1
:success
exit 0
::/
走过的坑:
1.windows下的findstr对正则表达式的支持不够全面,对于方括号的匹配始终没有找到解决办法,最后干脆用linux下的工具来实现
2.找到windows版的grep和awk工具,放到系统盘的目录有讲究,32位系统的话放到c:\windows\system32下,64位系统需要放到C:\Windows\SysWOW64,否则会报找不到命令的错误
3.svn的日志是一行一行提交的,所以需要串成一行字符串来做处理
为svn添加hook脚本
最新推荐文章于 2023-06-01 17:04:47 发布