用VBS脚本检查提交log是否足够(长)
pre-commit.bat内容
:: begin of pre-commit.bat :: 阻止空日志信息的版本的提交 @echo off SETLOCAL SET REPOS=%1 SET TXN=%2 cscript D:\svn\repository\demo\hooks\pre-commit.vbs "%REPOS%" "%TXN%" :: end of pre-commit.bat
pre-commit.vbs代码
'必须显式声明变量 Option Explicit Private Args Public wshShell,logExec Set wshShell = WScript.CreateObject("WScript.Shell") Set Args = WScript.Arguments Dim MaxArgs MaxArgs = 2 '调用主要处理流程 Call Main '******************************************************************************* 'Main()过程定义 '******************************************************************************* Private Sub Main() Call ArgsErr Call CheckLog End Sub 'Main() '******************************************************************************* '出错退出函数,统一进行资源释放 '******************************************************************************* private sub ErrExit() Set Args = Nothing Set wshShell = Nothing Set logExec =Nothing '错误返回 WScript.Quit (1) end sub 'ErrExit() '******************************************************************************* '参数出错处理 '******************************************************************************* Private Sub ArgsErr() If (Args.Count < MaxArgs) Then '在系统信息中记录此错误信息(事件查看器) wshShell.LogEvent 1, "缺少参数个数!" '错误信息输出到客户端 WScript.StdErr.WriteLine("缺少参数个数!") '错误返回 Call ErrExit() End If End Sub 'ArgsErr() '******************************************************************************* '日志检查 '******************************************************************************* Private Sub CheckLog() Dim sReposPath, sRevision, sCommand, sLog sReposPath = cstr(Args(0)) sRevision = cstr(Args(1)) '合成svnlook 命令 sCommand = "D:/svn/bin/svnlook.exe log " + sReposPath + " -t " + sRevision Set logExec = wshShell.Exec(sCommand) '读取svnlook log命令返回结果 Do While Not logExec.StdOut.AtEndOfStream sLog = logExec.StdOut.ReadAll() loop if len(sLog)<=10 then WScript.StdErr.WriteLine("备注太短,至少10字!") Call ErrExit() end if End Sub
注意VBS代码文件的保存格式使用UNICODE,不然出现乱码,命令行工具需要在系统PATH路径中,否则需要全路径