Subversionのコミットメールを送信スクリプト
Subversionのレポジトリにコミット(commit)があった場合に、メールが飛ぶようにする方法はググるとたくさん出てくる。具体的には、レポジトリ配下に hooks/post-commit というスクリプトを置いて、apacheユーザー(WebDAV+SVNの場合)などに実行権限を与えれば良い。
問題は、その post-commit スクリプトの中身だ。テンプレートとして用意されている post-commit.tmpl は外部の perl と python のスクリプトを使うようだが、なんだかいまいち。
良く出回っているのはRubyで書かれたものだが、日本語の扱いがタコなので、文字化けしたり途中で落ちたりして、どうも決定版がない。
下記のスクリプトは、今日半日かけて試行錯誤しながら、それら参考にして改造したやつだ。今のところ順調に動いていそうだ。使いたい人は自己責任にてどうぞ。ただ、不具合があったらレポートよろしゅうに!
pjname, toaddr, fromaddr, smtpsrv はちゃんと設定してね!
あっ、そうそう、Rubyは1.8.3以上でよろしくね。
#!/usr/bin/ruby # customize here!!!! pjname = 'Project Name' # プロジェクト名(メールのタイトルに表示される) toaddr = 'toaddress@hogehoge.jp' # メール送信先(To)アドレス fromaddr = 'fromaddress@hogehoge.jp' # メール送信者(From)アドレス smtpsrv = 'smtp.hogehoge.jp' # 送信SMTPサーバーのアドレス(MXは引かないよん!) REPOS=ARGV[0] REV=ARGV[1].to_i tolist = [toaddr] ENV['LANG']='en_US.UTF-8' svnauthor=%x{svnlook author #{REPOS} -r #{REV}}.chomp! svndate=%x{svnlook date #{REPOS} -r #{REV}}.chomp! ENV['LANG']='ja_JP.UTF-8' svnchanged=%x{svnlook changed #{REPOS} -r #{REV}} svnlog=%x{svnlook log #{REPOS} -r #{REV}} svndiff=%x{svnlook diff #{REPOS} -r #{REV}} require 'kconv' require 'net/smtp' Net::SMTP.start(smtpsrv, 25) { |smtp| smtp.send_mail <<EndOfMail, fromaddr, *tolist From: Subversion Admin <#{fromaddr}> To: #{toaddr} Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Subject: [#{pjname}]Subversion commit #{REPOS} r#{REV} Subversion commit to #{REPOS} [Author] #{svnauthor} [Date] #{svndate} [New Revision] #{REV} [Changed] #{svnchanged.tojis} [Log] #{svnlog.tojis} [Diff] #{svndiff.tojis} EndOfMail }