【DevOps】SVN之常用Hook

事实证明,如果没有强有力的约束,那么哪怕制定的规范已经尽可能地少了,所有的人都认为有规范是好事,最终结果都只能是大失所望,热血已凉。

1. 概述

本文尝试收集常用的SVN pre-commit Hook,将规范的执行尽量由人治转向机器监督 —— 公平,冷血,高效。实现只配置一次,你就可以相信你加的每条规范肯定被不打任何折扣,百分之百覆盖率地执行下去了。

目前已经实现了:

  1. Java代码的CheckStyle规范检查。
  2. SVN提交日志长度检查。
  3. JS提交文件中不允许包含debugger和console的检查。
  4. IDE配置文件不允许提交的检查。

2. pre-commit Hook内容

set python="C:\Python27\python.exe"
set svnchecker="F:\_svnChecker\svnchecker-0.3"
set svnlook="D:\VisualSVN Server\bin\svnlook.exe"

rem 以下这行必须要! (主要用于下方JS文件中关键字的过滤)
setlocal ENABLEEXTENSIONS  ENABLEDELAYEDEXPANSION
setlocal
set REPOS=%1
set TXN=%2

rem checkstyle, 更具体的参见下方链接
rem checkstyle hooks
%python% %svnchecker%\Main.py PreCommit %REPOS% %TXN% || exit 1

rem 确保填写注释
rem 字符串:"....." 为5个点, 也可理解为字符数目。
rem Make sure that the log message containssome text.
%svnlook% log -t "%TXN%" "%REPOS%" | findstr "....." > null
if %errorlevel% gtr 0 goto err

rem 文件类型
%svnlook% changed -t "%TXN%" "%REPOS%" | findstr "\.classpath$"
if %errorlevel% EQU 0 (goto SuffixError)
%svnlook% changed -t "%TXN%" "%REPOS%" | findstr "\.project$"
if %errorlevel% EQU 0 (goto SuffixError)
%svnlook% changed -t "%TXN%" "%REPOS%" | findstr "\.mymetadata$"
if %errorlevel% EQU 0 (goto SuffixError)
%svnlook% changed -t "%TXN%" "%REPOS%" | findstr "\.settings"
if %errorlevel% EQU 0 (goto SuffixError)
%svnlook% changed -t "%TXN%" "%REPOS%" | findstr "\.idea"
if %errorlevel% EQU 0 (goto SuffixError)
%svnlook% changed -t "%TXN%" "%REPOS%" | findstr "\.myeclipse"
if %errorlevel% EQU 0 (goto SuffixError)
%svnlook% changed -t "%TXN%" "%REPOS%" | findstr "\\target"
if %errorlevel% EQU 0 (goto SuffixError)
%svnlook% changed -t "%TXN%" "%REPOS%" | findstr "\\WebContent"
if %errorlevel% EQU 0 (goto SuffixError)
rem 这个主要是为了避免 WEB-INF目录下的 classes文件夹 被提交
%svnlook% changed -t "%TXN%" "%REPOS%" | findstr "\\classes"
if %errorlevel% EQU 0 (goto SuffixError)


rem 重要! 如果单独提取这一段, 注意一起复制上方的 setlocal ENABLEEXTENSIONS  ENABLEDELAYEDEXPANSION 配置
rem 提取ADD/MODIFY的JS文件路径清单, 将文件路径清单输出到临时文件中,方便之后的分析
%SVNLOOK% changed -t %TXN% %REPOS% | findstr  /V "^D   " | findstr ".js$" >diffdir.log
rem 遍历本次SVN提交的每个JS文件里的内容
for /f "delims=" %%i in (diffdir.log) do (
	set "patha=%%i"
	set pathb=!patha:~4!
	%SVNLOOK% cat -t %TXN% %REPOS% "!pathb!" > diffcat.log
        for /f "delims='~'" %%j in (diffcat.log)  do (
           set target=%%j
           rem 坑死爹了, 必须使用 " , 不能使用 '
           echo !target! | findstr "debugger console"
           if !errorlevel! EQU 0 (goto jsFail)
        ) 
        rem findstr "debugger" diffcat.log
        rem if !errorlevel! EQU 0 (goto jsFail)  
)

exit 0

:SuffixError
echo 含有禁止存在于受控库的文件类型,如:.classpath, .project, .settings, .mymetadata, .settings/, .idea/, .myeclipse/, target/, WebContent/等。受控库良好的性能需要大家共同维护,谢谢! 1>&2
exit 1

:err
echo 注释字符串长度不能小于5,不允许提交 1>&2
echo "%REPOS%" -t "%TXN%" 1>&2
echo %errorlevel%
exit 2

:jsFail
echo 含有禁止存在de关键字debugger, 请删除再提交。受控库良好的性能需要大家共同维护,谢谢! 1>&2
exit 2

3. Links

  1. 【DevOps】SVN集成Checkstyle实现代码自动静态检查
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值