svn通过hook对提交行为做检查

本文介绍了一个用于SVN的预提交(pre-commit)脚本优化方案,该方案使用了awk来处理提交前的日志格式校验、文件名空格检查及文件类型验证等逻辑。通过对提交过程进行自动化检查,提高了代码提交的质量与效率。

目标:防止提交的文件名有空格,规范提交日志格式


同样的通过awk来处理主要逻辑,需要编辑pre-commit.bat
 

::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 检查文件名空格
svnlook changed %REPOS% -t %TXN% | awk "{if(NF >2) print $0}" 1>&2
svnlook changed %REPOS% -t %TXN% | awk "{if(NF >2) print $0}" | findstr "..." > nul
if %errorlevel% EQU 0 goto :err_action3




rem 检查上传文件类型
svnlook changed %REPOS% -t %TXN% | awk "{if(($1==\"A\" || $1==\"D\") && ($2 ~/Client\/Assets/)){r_str=\"\";last_c=substr($2,length($2),1);if(last_c ==\"/\"){r_str=substr($2,0,length($2)-1)}else{r_str=$2} if(r_str ~/meta$/){m_pos=index(r_str,\"meta\");id=substr(r_str,0,m_pos-2);m_arr[id]=1;}else{o_arr[r_str]=1;}}}END{for(i in o_arr){if(m_arr[i] != 1){print i}}}" 1>&2
svnlook changed %REPOS% -t %TXN% | awk "{if(($1==\"A\" || $1==\"D\") && ($2 ~/Client\/Assets/)){r_str=\"\";last_c=substr($2,length($2),1);if(last_c ==\"/\"){r_str=substr($2,0,length($2)-1)}else{r_str=$2} if(r_str ~/meta$/){m_pos=index(r_str,\"meta\");id=substr(r_str,0,m_pos-2);m_arr[id]=1;}else{o_arr[r_str]=1;}}}END{for(i in o_arr){if(m_arr[i] != 1){print i}}}" | awk "BEGIN{str=\"\"}{if(NR==1){str=$0}else{str=str\"\"$0}}END{if(str != \"\")print str}" | findstr "..." > nul
if %errorlevel% EQU 0 goto :err_action2


::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
goto :err_exit


:err_action3
echo 文件名中不能有空格 1>&2
goto :err_exit


:err_action2
echo 请确保源文件与meta文件同时操作 1>&2
goto :err_exit


:err_action1
echo 输入的注释要遵照格式:[模块名]操作日志,其中模块名不少于4个字符(或2个汉字),操作日志不少于10个字符(或5个汉字) >&2
goto :err_exit


:err_exit
exit 1

:success
exit 0
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值