您的位置:首页 > 其它

Subversion简明手册--使用hook svn

2010-03-10 22:52 399 查看
使用
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

)之前。

由于修订版属性一旦修改就会
永久的丢失,除非安装这个事件的
hook


subversion


客户端不允许远程修改修订版属性。

传给
hook


参数:

-



1


代码库路径。

-



2


要修改的修订版号。

-



3


操作用户名。

-


修改的属性。

hook

的返回值:非
0


终止。

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

post-revprop-change

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

如果没有安装
pre-revprop-change


hook


这个事件的
hook

不会被执行。

传给
hook


参数:

-



1


代码库路径。

-



2


要修改的修订版号。

-



3


操作用户名。

-


修改的属性。

hook

的返回值被忽
略。

发送邮件通知。

hook

只有安装之后才
会被执行,在
Subversion

中这一过程相当简单。只需将
hook


在代码库目录的
hooks

子目录下即可。为了能顺利地找到它们,
Subversion



hook


命名与上表的事件名同名,如
pre-commit


hook

名就是
pre-commit

(请
确保它是可执行的,在
windows

平台下需要添加对应的扩展名,如
bat


exe


com

。)。
创建代码库之后,
Subversion

会创建对应的这
5

个事件的
hook


版。选取所需的模版,然后将其改名,在修改内容。这样
hook

就可以工作了,当
然请先确保
hook

本身能正常的执行。

hook

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

-


1


使用所在平台的脚本语言,如
unix

下的
shell

,或
windows/dos


批处理命令。

-


2


使用相关的语言,如
c



-


3


使用脚本语言,如
python


perl

等实现主体。然后
通过法
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

下的不太清楚,不过批命令就太差了),建议采用方法
2


3


4


从简易性方面的考虑,推荐方法
3

。因为象
python

就已经提供了
一些常用的功能,如发送邮件。

最后,就是
subversion


正在存取代码库的过程的所属用户来执行
hook

。因此,请确保这个用户具有足够的权限,可以访问
hook


以直接或间接访问的资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: