Joinclass Inc  
软件开发 软件配置 项目管理 软件工程
公告
  • 本人联系方式: E-mail: tilanmaster@gmail.com msm: J.joy@msn.com
日历
统计
  • 随笔 - 53
  • 文章 - 52
  • 评论 - 67
  • 引用 - 0

导航

常用链接

留言簿(1)

随笔分类(53)

随笔档案(53)

文章分类(61)

相册

JAVA学习链接

搜索

  •  

积分与排名

  • 积分 - 90086
  • 排名 - 77

最新评论

阅读排行榜

评论排行榜

 
Subversion 服务器 mailer 指南 Subversion 服务器为我们提供了很多的 hook ,可以让我们在有人对仓库进行动作的时候进行一些相应的处理,这些 hooks 都放在仓库目录下的 hooks 子目录下面,具体 hook 的含义可以参考 Subversion 的帮助的第 5 章的 Hook Scripts 。( Subversion 的在线官方文档 http://svnbook.red-bean.com/ ,有多种语言版本),那么我们怎么用这些 hooks 来帮我们更加有效的利用 Subversion 呢。常用的一个方面是当有人提交新版本的时候能够自动的发送邮件给指定的一群人,方便交流和管理。在 Subversion 1.3 版本之前也有人用 pre-commit 来让 svnserve 也能根据目录来实现写权限,不过现在 1.3 版本的 svnserve 已经能够 使用 mod_authz_svn 相同的首选策略文件。
下面我们以 post-commit 为例,实现有人提交新版本的时候能够自动的发送邮件给指定的一群人。当有用户提交新版本的时候,会触发 post-commit 这个 hook script ,它会接受到 仓库路径和当前提交版本的版本号这 2 个参数。接下来,我们怎么利用这个 script 来做我们所需要的事情呢,通过使用 mailer.py 这个 python 脚本就可以实现我们的需求了。首先 check out 这个文件, http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/mailer ,一般来说安装好 python 2.3 Subversion python binding 之后就可以运行这个脚本了。
首先我们看看这个脚本如何使用,不带参数执行该脚本,结果如下:
USAGE: mailer.py commit      REPOS REVISION [CONFIG-FILE]
       mailer.py propchange  REPOS REVISION AUTHOR PROPNAME [CONFIG-FILE]
       mailer.py propchange2 REPOS REVISION AUTHOR PROPNAME ACTION
                             [CONFIG-FILE]
       mailer.py lock        REPOS AUTHOR [CONFIG-FILE]
       mailer.py unlock      REPOS AUTHOR [CONFIG-FILE]
2 个参数是对应不同的 hook 的,各参数对应的 hook 如下
参数
hook
Commit
*commit
Propchange
*revprop-change
Propchange2
post-revprop-change
Lock
*lock      
Unlock
*unlock

这里我们用的是post-commit hook,于是我们选择用commit参数。REPOS REVISION由hook提供,我们只需要指定CONFIG-FILE文件,如果没有指定该文件,mailer将会依次在REPOS/conf/、mailer所在目录查找。

我们只要在post-commit hook中加上 mailer commit “$1” “$2” mailer.conf或者如果你的服务器架设在windows下的话,用python c:\repos\hooks\mailer.py commit %1 %2 c:\repos\hooks\mailer.conf,mailer.py的路径最好用绝对路径,因为svnserve在hook启动时候的路径是svnserve所在目录。这样我们就可以让Subversion server在有人commit之后尝试发送邮件给我们了。这里为什么要用尝试,因为还有另外一份很重要的文件需要我们修改后才能正常发送邮件。

这个重要的文件就是mailer.conf文件,在先前我们check out的文件夹下面有一个简单的例子mailer.conf.example,我们逐行解释一下。注意,不要随便注释某些参数,可能会导致脚本无法运行。

[general]

#mail_command = /usr/sbin/sendmail

# mailer模块发送邮件的方式有3种,Pipe,SMTP,stdout

#mail_command将指定Pipe方式发送给mail_command指定的程序



#smtp_hostname = localhost

#smtp_hostname将指定SMTP方式发送给smtp_hostname指定的服务器

# Username and password for SMTP servers requiring authorisation

#smtp_username = example

#smtp_password = example



#如果既没有指定Pipe方式也没有指定SMTP方式,则发送到stdout



[defaults]

#这里定义一些默认的行为

diff = /usr/bin/diff -u -L %(label_from)s -L %(label_to)s %(from)s %(to)s

#diff程序以及参数等



commit_subject_prefix =

#commit动作的邮件的标题前缀



propchange_subject_prefix =

# propchange动作的邮件的标题前缀



lock_subject_prefix =

# lock动作的邮件的标题前缀



unlock_subject_prefix =

# unlock动作的邮件的标题前缀



from_addr = invalid@example.com

#邮件的from addresses



to_addr = invalid@example.com

#邮件的接收地址,用空格分隔,这里也可以用mapping_specification来表示



reply_to =

#邮件的回复地址



generate_diffs = add copy modify

#diff的设置,这里设置什么时候来使用diff,有效地设置是add,copy,modify,delete

#如果不想用diff,可以其他无效的单词来设置,如“no”,如果为空,

#则相当于add,copy,modify,delete同时有效



suppress_deletes = yes

#如果generate_diffs为空,delete选项无效 (不建议使用这种方式)



#suppress_adds = yes

#如果generate_diffs为空,add选项无效 (不建议使用这种方式)



show_nonmatching_paths = yes

#是否显示不匹配的路径。



# truncate_subject = 200

#邮件主题的截取长度,0为关闭,如果注释,则为0

# --------------------------------------------------------------------------



[maps]

#maps section定义一些选项的映射关系,

#可以通过option_name_to_remap = mapping_specification的形式来定义选项的取值。

#可以remap的option_name 为defaults section中除diff外其他的key值

#注意mapping_specification不要用大写字母开头,会导致无效。

#一个简单的例子如下

#[for game]

#for_paths = game

#to_addr = game

#[maps]

#to_addr = [mailing-lists]

#[ mailing-lists]

#game = a@abc.comb@abc.com c<c@abc.com>



#其他的section均为用户自定义的group

#自定义的group可重定义defaults section中间定义的选项的取值

#如何匹配这些group是由

#   for_repos

#   for_paths

#这2个选项的定义来决定的

#一个简单的例子如下:

#仓库的结构如下

#   REPOS/

#     clients/

#       gsvn/

#       rapidsvn/

#       winsvn/

# 可以用正则表达式来匹配某些目录,同时定义一个字符串变量NAME,

# %(NAME)s就可以获得该变量的值,如:

#   for_paths = clients/(?P<client>[^/]*)($|/)

#   to_addr = commits@%(client)s.tigris.org

#一个预定义的变量为author,它缺省由mailer.py的AUTHOR定义或者是

#该版本的author,如果没有定义前面2个的值,author的值为"no_author"



配置好这个文件之后,我们的邮件系统就可以正式投入运营啦,通过一些手段,我们也可以把这个文件放入一个仓库中便于进行有效的管理。
posted on 2007-01-12 23:23 Joinclass Inc 阅读(1737) 评论(1)  编辑 收藏 引用 所属分类: 配置管理
评论:
只有注册用户登录后才能发表评论。
 
Copyright © Joinclass Inc Powered by: 博客园 模板提供:沪江博客