刚接到一个需求:当某个用户向CVS提交了文档之后,自动以邮件的形式通知Leader。 CVS服务器可以设置一些触发器,设置好触发器之后可以实现这样的功能。
假设开发参与开发者同属 tdd 这个用户组。
1. 邮件服务器的设置
邮件服务器采用 Sendmail ,在alias文件里加上如下的语句:
tdd: user1,user2,user3
这样发往tdd的邮件可以自动的发往user1,user2,user3,为下面的设置提供了方便。
2. CVS服务器的触发器设置:
与此项目相关的用CVS管理的程序以及文档在$CVSROOT/TDD_WAMS/,关于权限的设置见我的另一篇引用《CVS安装和管理》,在此不说述,下面说一下触发器的设置。
在CVS仓库中的CVSROOT目录下有一些loginfo、taginfo之类的文件就是用来设置触发器的 ,这些触发器是对一些信息用正则表达式进行匹配,如果匹配成功则进行相关的处理,Apache的CVS服务器是用一些perl的程序来完成相关的处理的,不是很复杂的处理可以只用一些命令来完成。
loginfo 是当 "cvs commit" 的log信息发送出时进行处理,它对发生改变的目录(相对于 $CVSROOT)进行匹配,如果匹配成功则将 "cvs commit" 命令的log信息发送到后续处理的标准输入。可以用 % 指定一些特殊字串,要引用多个可以用{}括起来。
其中 %s 表示文件名,%V 表示旧版本号,%v表示新版本号,% t表示tag或分支名。如果被提交的文件为MyClass.java的
1.2 -> 1.3 ,%{sVv} 就表示 MyClass.java,1.2,1.3。
这个文件中可能会有一些注释,DEFAULT行是默认的处理,ALL行表示所有的处理。
在loginfo中加入下列内容:
TDD_WAMS (echo ""; id; date; cat) | Mail -s %{sVv} tdd@localhost
TDD_WAMS (echo "";id ;date;cat) >> $CVSROOT/CVSROOT/commitlog
第一行的意思是说当有向$CVSROOT/ TDD_WAMS下提交修改发生时,将修改的日志发往tdd@localhost,邮件的标题为发生改变的文件名、旧版本号和新版本号。这台服务器上再安装好pop3服务,项目的程序以及文档的每一步修改对所有参与开发的人员便是透明的了。
第二行就是把修改日志输出到文件。
使用loginfo只是在提交之后才会触发,对于提交之时(也就是代码入库之前)的触发,就可以用commitinfo,用它自己的注释说:The "commitinfo" file is used to control pre-commit checks。对于使用commitinfo进行pre-commit checks,我还没有使用过,不过有时间就会试试。