利用 python 实现 svn 自动发送邮件功能

版本管理 2 1117 张长瑞 收藏

利用 python 实现 svn 自动发送邮件功能

  1. Hooks

Hooks 是 svn 库下存放脚本的目录,可以利用这些脚本在 svn 执行相应操作时实现发送邮件提醒、自动备份版本库等功能(本文以发送邮件提醒为例),部分脚本名称及含义如下:

Post-commit.tmpl            commit 之后执行此脚本

Pre-commit.tmpl             commit 之前执行此脚本

我们要实现用户 commit 之后的自动提醒功能,仅用到 post-commit.tmpl,具体修改步骤如下:

mv post-commit.tmpl post-commit    去掉临时脚本后缀

vi post-commit                注释末尾两行并添加如下内容

REPOS="$1"

REV="$2"

#commit-email.pl "$REPOS" "$REV" commit-watchers@example.org

#log-commit.py --repository "$REPOS" --revision "$REV"

/home/svn/1111_doc/hooks/mailer/mailer.py commit "$REPOS" "$REV" /home/svn/1111_doc/conf/mailer.conf

#这句意思是利用 mailer.py 这个 python 程序及 mailer.conf 这个邮件配置文件在 commit 后,将 “库名”“版本” 发送至 mailer.conf 里配置好的邮箱,注意:项目路径需要根据实际情况修改

#log-commit.py --repository "$REPOS" --revision "$REV"

if [ $? -ne 0 ]; then

        echo "failure to mail.py commit $REPOS $REV" >> /home/svn/1111_doc/svnmail.log

#如果发送失败将日志发送到 svnmail.log,自己创建即可,注意更改为 svn 的用户权限

fi

  1. Svntools

上文脚本中涉及的 mailer.pymailer.conf 文件实际上是 svn 自带工具,具体目录如下:

/home/svn/tmp/subversion-1.5.6/tools/hook-scripts/mailer/     (仅供参考)

该目录下有 2 个文件,分别为 mailer.config.example 和 mailer.py,将其分别放入对应目录下并授予 svn 用户权限:

cp –R ./mailer /home/svn/1111_doc/hooks

chown –R apache:apache mailer

cd mailer/

cp mailer.config.example /home/svn/1111_doc/conf/mailer.conf

修改 mailer.conf 配置文件,根据实际情况修改如下高亮部分:

# This option specifies the hostname for delivery via SMTP.

smtp_hostname = smtp.xxxx.com.cn

 

# Username and password for SMTP servers requiring authorisation.

smtp_username = svn@xxxx.com.cn

smtp_password = xxxxxxxx

# the from address, you can use "from_addr =".

from_addr = svn@xxxx.com.cn

 

# The default To: addresses for message.  One or more addresses,

# separated by whitespace (no commas).

# NOTE: If you want to use a different character for separating the

#       addresses put it in front of the addresses included in square

#       brackets '[ ]'.

to_addr = xxx@xxxx.com.cn

  1. python 导入库文件

测试发送邮件时可能会报错:you need version 1.5.0 or better of the subversion python bindings,此时需要进入 python,导入 svn 相关的文件即可

python

>>>import svn.fs

>>>import svn.delta

>>>import svn.repos

>>>import svn.core

进行测试时可以用如下命令,指定库及特定版本,测试邮件是否发送成功(每行之间都是一个空格):

/home/svn/1111_doc/hooks/mailer/mailer.py  commit /home/svn/1111_doc  10 /home/svn/1111_doc/conf/mailer.conf

之后检查是否收到邮件。


相关推荐:

网友留言:

  1. milton010
    回复
    版主好,遇到问题未找到解决方法,请指教,谢谢!
    软件版本:
    subversion-1.7.14-16.el7.x86_64
    Python 2.7.5
    错误信息:
    [root@ser01 svn]# /svnroot/demo/hooks/mailer/mailer.py commit /svnroot/demo/ 1 /svnroot/demo/conf/mailer.conf
    Traceback (most recent call last):
    File "/svnroot/demo/hooks/mailer/mailer.py", line 1444, in
    sys.argv[3:3+expected_args])
    File "/usr/lib64/python2.7/site-packages/svn/core.py", line 307, in run_app
    return func(application_pool, *args, **kw)
    File "/svnroot/demo/hooks/mailer/mailer.py", line 103, in main
    'repos_basename': os.path.basename(repos.repos_dir)
    File "/svnroot/demo/hooks/mailer/mailer.py", line 1184, in __init__
    self._prep_maps()
    File "/svnroot/demo/hooks/mailer/mailer.py", line 1268, in _prep_maps
    raise UnknownMappingSpec(mapvalue)
    __main__.UnknownMappingSpec: xxx@xxxx.com
    1. 团子精英
      回复
      可能是高版本的svn的mailer.py的函数有所变化。
      建议看下mailer.conf 文件中关于[maps]的部分,将[maps]信息加入其中。 应该是可以解决的
您需要 登录账户 后才能发表评论

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码