2012-07-03 92 views
4

我尝试在Subversion 1.6.12服务器上设置提交后挂接以在提交时发送通知邮件。SVN hook mailer.py配置

我已经在基本配置中使用了脚本mailer.py(由utilversion文件夹中的subversion团队提供)(只需在每次提交之后发送一封电子邮件),它运行良好。

但现在,我只想在/ tags /文件夹中提交时才发送邮件。

这是我的标准mailer.conf(行之有效):

[general] 
smtp_hostname = xxx.xxx.xxx.xxx 

[defaults] 
from_addr = [email protected] 
to_addr = [email protected] 

而这正是我试图在/标签/只配置一个邮件:

[general] 
smtp_hostname = xxx.xxx.xxx.xxx 

[defaults] 
from_addr = [email protected] 
to_addr = [email protected] 
for_paths = .*/tags/.* 

但看起来像我误解了配置,因为它不起作用:我收到邮件的所有提交(标签与否)

任何想法? 谢谢。

回答

0

最后,我用utils文件夹中(即使是不建议使用)可在另一个通知脚本解决我的问题:commit-email.pl

使用它像这样在我的post-commit钩子按预期方式工作:

REPOS="$1" 
REV="$2" 

LC_ALL=C /usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" $REV -m "tags/.*" -s "[TAGS]" --from [email protected] [email protected] 

但是如果有人对mailer.py做同样的事情,我仍然感兴趣!

+0

commit-email.pl已经过时了http://svn.apache.org/repos/asf/subversion/trunk/tools/hook -scripts/mailer/ –

+2

正如我在我的文章中所说,我知道commit-email.pl已被弃用mailer.py。我最初的问题是关于mailer.py,但我没有找到办法使它工作... –

4

有没有真正的好办法做到这一点。 mailer.py的设计使任何不与其他组匹配的提交都转到默认组。

在这mailer.conf.example暗示的文档,但并没有真正解释非常好:

在[defaults]部分指定的选项总是被选中。 不匹配for_repos的存在没有相关性。请注意,您可能仍然使用for_repos值来提取有用的信息(稍后的更多内容请参阅此 )。任何用户定义的组没有for_repos,或者其中包含匹配for_repos的用户定义的组将被选择用于潜在用途。

由存储库标识的用户定义组的子集进一步 根据for_paths选项细化。如果至少有 提交中的一个路径(*)与for_paths正则表达式匹配,则会选择一个组。注意 路径是相对于存储库的根,并且不 具有前导斜杠。

for_repos的含义对于缺省组也适用于for_paths。 I.E.那for_paths只对变量提取有用。

没有做任何代码更改的一个选项是将你的[默认值]中的to_addr设置为你刚丢弃的地址,如[email protected]。然后用另一个不同的to_addr来设置一个不同的组,然后将它们传送到某个地方。

如果你愿意修改mailer.py一点点,你可以通过在配置类的which_groups功能注释掉以下两行避免这种情况:

if not groups: 
    groups.append((None, self._default_params)) 

为Subversion开发长期我想我们应该给mailer.py添加一个选项来请求默认部分不生成邮件。此外,我们应该修复文档以更清楚地了解此行为。

0

相反的:

for_paths = .*/tags/.* 

试试这个:

for_paths = ^tags($|.*) 

这是假设的标签目录是在你的库的根。

如果你有一个项目下的标签会像

for_paths = ^<project name>/tags($|.*)