Hooks功能--强制提交注释、允许修改日志

来源:互联网 发布:湘北山王数据 编辑:程序博客网 时间:2024/06/05 14:57

        所谓hooks,可以类似理解Linux内核Netfilter框架的hook点和hook函数的概念。当用户在维护代码的过程中,其执行的相关动作正好触发了相关hook点,就会去执行对应hook点的脚本。

        SVN 版本库目录下有hooks目录,里面有很多.tmpl的文件。这些文件用以定义某些动作触发的hook脚本。默认状态下,这些脚本的后缀都是.tmpl, 是不起作用的。相当于Netfilter的各个hook点没有注册hook函数。所以,当用户执行相关维护代码动作的时候,也不会触发hook脚本。因 此在默认状态下,用户提交代码的时候,不用添加注释信息也会被版本看所接受。而且,用户想修改自己的注释时,会得到服务器拒绝的相关提示信息。

       在开发项目过程中,团队中总是有人忘记添加注释。团队其他成员不知道你提交是什么代码, 给回滚操作带来很多不必要的麻烦。SVN支持设置来提醒添加必要注释并规范日志的大小,比如日志最少字数为五个。这一功能增强了团队合作能力。以下将就Windows下SVN设置详细介绍。本文介绍方法适用于Windows系统,默认SVN客户端TortoiseSvn已经安装,TortoiseSvn下载、安装方法,这里不再赘述。

      假定Repository为用户在SVN服务器端或客户端所创建的版本库,则该文件夹下文件分布如下:


强制添加注释并设置最少字数

方法一:用户提交代码的动作,对应的是pre-commit。因此,可以修改hooks\pre-commit.tmpl文件。文件名修改为pre-commit,Windows下可以修改为pre-commit.bat。其内容如下:

@echo off

setlocal

set REPOS=%1

set TXN=%2

rem check that logmessage contains at least 10 characters

rem .....代表5个字符

svnlook log "%REPOS%" -t "%TXN%" |findstr ".........." > nul

if %errorlevel% gtr 0 goto err

exit 0

:err

echo Empty log message not allowed. Commit aborted!1>&2

exit 1

方法二:

通过TortoiseSvn,在本地副本中,选择项目,右键选择TortoiseSvn,选择属性,添加tsvn:logminsize,将值限定为 10,添加了logminsize属性后,要将本地工作副本commit一下,才能生效。如下图:


提交注释长度少于5个,失败提示如下:


允许修改日志内容/添加遗漏日志

用户修改注释信息的动作,对应的是pre-revpos-change. 将hooks/下pre-revpos-change.tmpl更名为pre-revpos-change.bat。通常该文件包含的功能就是允许用户修改注释信息。其内容如下:

@ECHO OFF

:: Set all parameters. Even though most are not used, in case youwant to add

:: changes that allow, for example, editing of the author oraddition of log messages.

set repository=%1

set revision=%2

set userName=%3

set propertyName=%4

set action=%5

 

:: Only allow the log message to be changed, but not author, etc.

if /I not "%propertyName%" == "svn:log" gotoERROR_PROPNAME

 

:: Only allow modification of a log message, not addition ordeletion.

if /I not "%action%" == "M" goto ERROR_ACTION

 

:: Make sure that the new svn:log message is not empty.

set bIsEmpty=true

for /f "tokens=*" %%g in ('find /V ""') do (

set bIsEmpty=false

)

if "%bIsEmpty%" == "true" goto ERROR_EMPTY

 

goto :eof

 

:ERROR_EMPTY

echo Empty svn:log messages are not allowed. >&2

goto ERROR_EXIT

 

:ERROR_PROPNAME

echo Only changes to svn:log messages are allowed. >&2

goto ERROR_EXIT

 

:ERROR_ACTION

echo Only modifications to svn:log revision properties are allowed.>&2

goto ERROR_EXIT

 

:ERROR_EXIT

exit /b 1

 

原创粉丝点击