当特定文件被更改时,SVN将提交挂钩发送给电子邮件用户

时间:2011-09-19 16:00:16

标签: svn post-commit svn-hooks

我想添加一个post commit钩子,这样如果用户提交对特定文件的更改,我将收到电子邮件通知。

有没有人见过这样的例子,或者有可能吗?

之前我已经设置了一个预提交钩子,但这是我的知识限制。

3 个答案:

答案 0 :(得分:6)

我有post-commit hook on github这样做,它允许用户(而不是管理员说出他们正在观看哪些文件的更改,以及应该将这些更改发送到哪些电子邮件地址。

您可以将其与我的pre-commit-kitchen-sink hook结合使用,以确保用户只能编辑自己的观看文件。钩子脚本使用Perl,但它们不需要任何非标准模块,因此它们非常易于使用。

每个用户都有自己的监视文件,语法非常简单:

mail = david@gmail.com
file =**/build.xml
match = [Mm]akefile

mail行是我要通过电子邮件发送通知的地方。我可以有多个。 file是我正在观看的文件的glob表达式(锚定在表达式的正面和背面)。 match行类似,并使用未锚定的Perl正则表达式。

监视文件存储在Subversion存储库中您指定的目录中。这意味着用户可以设置自己的手表。您可以使用我的pre-commit-kitchen-sink挂钩来阻止用户更改其他用户的监视文件:

[file You are only allowed to change their own watch files]
file =/watchfiles/**
permission = read-only
users = @ALL

[file You are only allowed to change their own watch files]
file = /watchfiles/<USER>.cfg
permission = read-write
users = @ALL

<USER>字符串被解释为用户的ID。


实施例

  

如果我想将post commit hook设置为多个文件,那么我可以设置吗?比如file = ab / build.xml,bb / cs.txt,cc / 等我想通过电子邮件通知这些文件

您可以为每个模式添加一行:

 email = my@email.com
 file = **/ab/build.xml
 file = **/bb/cs.txt
 file = **/cc/*.*

请记住,file glob模式锚定到存储库的根目录(使用/作为根),因此您需要指定完整路径,或使用**/指定该文件的任何路径。

答案 1 :(得分:1)

在subversion发行版中有几个发送电子邮件的钩子脚本。查看目录

tools/hook-scripts

contrib/hook-scripts

答案 2 :(得分:0)

我设置了一个PHP脚本来执行post-commit。您可以将PHP脚本编辑为非常智能,并根据所使用的文件执行某些操作。

/颠覆/钩/提交后:

 REPOS="$1"
 REV="$2"
 MESSAGE=$(svnlook propget --revprop -r $REV $REPOS svn:log)
 CHANGES=$(svnlook changed -r $REV $REPOS)
 php /usr/share/subversion/hook-scripts/commit-email.php "$REPOS" "$REV" "$MESSAGE" "$CHANGES"

/usr/share/subversion/hook-scripts/commit-email.php:

 <?php
      //files updated will be in $_SERVER['argv'][4], you could expand it in to an a
      //array and search for what you need, and depending on what's found, send emails accordingly.
 ?>