4

我尝试在 subversion 1.6.12 服务器上设置提交后挂钩,以便在提交时发送通知邮件。

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

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

这是我的标准 mailer.conf(效果很好):

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

[defaults]
from_addr = myemail@domain.tld
to_addr = myemail@domain.tld

这就是我试图为 /tags/ 上的邮件配置的内容:

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

[defaults]
from_addr = myemail@domain.tld
to_addr = myemail@domain.tld
for_paths = .*/tags/.*

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

任何想法?谢谢你。

4

3 回答 3

4

确实没有什么好的方法可以做到这一点。mailer.py 的设计使得任何与另一个组不匹配的提交都转到默认组。

mailer.conf.example中的文档暗示了这一点,但并没有很好地解释它:

始终选择 [defaults] 部分中指定的选项。不匹配的 for_repos 的存在没有相关性。请注意,您仍然可以使用 for_repos 值来提取有用的信息(稍后会详细介绍)。任何没有 for_repos 或包含匹配 for_repos 的用户定义组都将被选择用于潜在用途。

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

对于 for_repos 所说的也适用于 for_paths 相对于 defaults 组。即 for_paths 仅对变量提取有用。

不进行任何代码更改的一种选择是将 [defaults] 中的 to_addr 设置为您刚刚丢弃的 devnull@example.com 之类的地址。然后使用不同的 to_addr 设置一个不同的组,该组实际上将被传递到某个地方。

如果您愿意稍微修改您的 mailer.py,您可以通过在 Config 类的 which_groups 函数中注释掉以下两行来避免这种情况:

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

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

于 2013-02-20T01:18:48.240 回答
0

代替:

for_paths = .*/tags/.*

尝试这个:

for_paths = ^tags($|.*)

这是假设标签目录位于存储库的根目录。

如果您在项目下有标签,那就是

for_paths = ^<project name>/tags($|.*)
于 2013-05-23T14:30:53.173 回答
0

最后,我使用 utils 文件夹中的另一个通知脚本解决了我的问题(即使它已被弃用):commit-email.pl

在我的提交后挂钩中像这样使用它,按预期工作:

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

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

但是,如果有人有正确的配置来用 mailer.py 做同样的事情,我仍然很感兴趣!

于 2012-07-04T12:29:51.727 回答