Subversion简明手册--使用hook

使用hook,为了方便管理员控制提交的过程Subversion提供了hook机制。当特定的事件发生时,相应的hook会被调用,hook其实就相当于特定事件的处理函数。每个hook会得到与它所处理的事件相关的参数,根据hook的返回值,Subversion会决定是否继续当前的提交过程。

当前Subversion提供了5种可以安装的hook

事件名

 

 

时机

 

 

hook交互

 

 

一般用途

 

 

start-commit

 

 

事务创建之前。

 

 

传给hook的参数:

 

 

-        参数1,代码库路径。

 

 

-        参数2,试图提交的用户名。

 

 

hook的返回值:非0则终止。

 

 

判断用户是否有权限进行提交操作。

 

 

pre-commit

 

 

事务完成,但未提交。

 

 

-        参数1,代码库路径。

 

 

-        参数2,事务名。

 

 

hook的返回值:非0则终止提交,操作回滚。

 

 

对提交内容进行检查。如要求提交必须填写提交信息。

 

 

post-commit

 

 

事务提交完毕,新的修订版被创建。

 

 

传给hook的参数:

 

 

-        参数1,代码库路径。

 

 

-        参数2,刚创建的修订版号。

 

 

hook的返回值被忽略。

 

 

发送邮件通知,或备份代码库。

 

 

pre-revprop-change

 

 

修改修订版属性(如提交时提供的信息message)之前。

 

 

由于修订版属性一旦修改就会永久的丢失,除非安装这个事件的hooksubversion的客户端不允许远程修改修订版属性。

 

 

传给hook的参数:

 

 

-        参数1,代码库路径。

 

 

-        参数2,要修改的修订版号。

 

 

-        参数3,操作用户名。

 

 

-        要修改的属性。

 

 

hook的返回值:非0则终止。

 

 

保存修订版属性的改变记录。

 

 

post-revprop-change

 

 

修订版属性值被修改之后。

 

 

如果没有安装pre-revprop-changehook,这个事件的hook不会被执行。

 

 

传给hook的参数:

 

 

-        参数1,代码库路径。

 

 

-        参数2,要修改的修订版号。

 

 

-        参数3,操作用户名。

 

 

-        要修改的属性。

 

 

hook的返回值被忽略。

 

 

发送邮件通知。

 

 

hook只有安装之后才会被执行,在Subversion中这一过程相当简单。只需将hook放在代码库目录的hooks子目录下即可。为了能顺利地找到它们,Subversion规定hook的命名与上表的事件名同名,如pre-commithook名就是pre-commit(请确保它是可执行的,在windows平台下需要添加对应的扩展名,如batexecom。)。创建代码库之后,Subversion会创建对应的这5个事件的hook模版。选取所需的模版,然后将其改名,在修改内容。这样hook就可以工作了,当然请先确保hook本身能正常的执行。

hook的编写非常简单,通常的做法:

-        1:使用所在平台的脚本语言,如unix下的shell,或windows/dos的批处理命令。

-        2:使用相关的语言,如c

-        3:使用脚本语言,如pythonperl等实现主体。然后通过法1来调用。

-        4:使用相关的语言实现主体,然后通过法1来调用。

这里给出在windows下使用bat的例子,它实现了pre-commit hook主要作用是检查提交内容中是否包含说明信息,如果没有就放弃:

set REPOS=%1

 

 

set TXN=%2

 

 

set SVNLOOK="D:/Program Files/Subversion/bin/SVNLOOK.exe"

 

 

rem 此处不太严格,因为把空格也算了

 

 

FOR /F "usebackq delims==" %%i IN (`%%SVNLOOK%% log -t %TXN% %REPOS%`) DO exit 0

 

 

exit 1

由于平台的脚本系统功能毕竟有限(unix下的不太清楚,不过批命令就太差了),建议采用方法234。从简易性方面的考虑,推荐方法3。因为象python就已经提供了一些常用的功能,如发送邮件。

最后,就是subversion以正在存取代码库的过程的所属用户来执行hook。因此,请确保这个用户具有足够的权限,可以访问hook可以直接或间接访问的资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值