Subversion でコミットメールを出す post-commit スクリプト

日本語メールは ISO-2022-JP に限るの会編集(ぉ). 今見直すと変数名とか微妙なところがあるけどキニシナイ.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import sys
import smtplib

smtpserver = 'localhost'
fromaddr = 'svn-admin@hoge.local'
toaddrs = 'svn-ml@hoge.local'
svnlookcomm = 'LANG=ja_JP.UTF-8 /usr/local/bin/svnlook'

def svnlook(verb, repos, rev):
    p = os.popen('%s %s %s -r %s' % (svnlookcomm, verb, repos, rev))
    result = p.read()
    p.close()
    return result.rstrip('\r\n').decode('utf-8').encode('iso-2022-jp')

repos = sys.argv[1]
rev = sys.argv[2]

author = svnlook('author', repos, rev) or 'anonymous'
date = svnlook('date', repos, rev).split('(')[0][:-1]
changed = svnlook('changed', repos, rev)
log = svnlook('log', repos, rev)

subject = '%s r%s' % (repos.split('/')[-1], rev)
body = '''%s, %s, r%s

log:
%s

changed:
%s''' % (date, author, rev, log, changed)

msg = '''From: %s
To: %s
Subject: %s
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;  charset="ISO-2022-JP"

%s'''

server = smtplib.SMTP(smtpserver)
server.sendmail(fromaddr, toaddrs, msg % (fromaddr, toaddrs, subject, body))
server.quit()