subversionのコミットメールをrubyで送信する
subversionのコミットメールをrubyで送信する方法を見つけたけど、ちょっと使いづらかったので直してみた。
直した点は
- 複数の宛先
- それをファイルから読み込む
だ。
ファイルは三つ
- post-commit
- commit-email.to.yml
- commit-email.rb
- post-commit
#!/bin/sh export LANG="ja_JP.UTF8" REPOS="$1" REV="$2" ${REPOS}/hooks/commit-email.rb "$REPOS" "$REV"
- commit-email.rb
#!/usr/bin/ruby -Ke require 'net/smtp' require 'kconv' require 'yaml' REPOS=ARGV[0] REV=ARGV[1].to_i svnauthor=%x{svnlook author #{REPOS} -r #{REV} }.chomp svndate=%x{svnlook date #{REPOS} -r #{REV} }.chomp svnchanged=%x{svnlook changed #{REPOS} -r #{REV} }.chomp svnlog=%x{svnlook log #{REPOS} -r #{REV} }.chomp svndiff=%x{svnlook diff #{REPOS} -r #{REV} }.chomp toaddr =YAML.load_file('./commit-email.to.yml') fromaddr=['ttmmrr@example.com'] # from svnlog=svnlog.kconv(Kconv::UTF8, Kconv::ASCII) body = <<END_OF_BODY Subversion committed to #{REPOS} #{REV} Updated by #{svnauthor} Modified #{svndate} Log: -------------------------------------------------------- #{svnlog} Changed: [U:UPDATE A:APPEND D:DELETE] -------------------------------------------------------- #{svnchanged} Diff: -------------------------------------------------------- #{svndiff} END_OF_BODY message = <<END_OF_MESSAGE From: Subversion Admin <#{fromaddr}> To: #{toaddr.join(',')}, Subject: [SVN-#{REV}] Commit by #{svnauthor} MIME-Version: 1.0 Content-Type: text/plain; charset = ISO-2022-JP X-Mailer: /var/lib/svn/hooks/post-commit #{body.tojis} END_OF_MESSAGE Net::SMTP.start('ns.alp.co.jp', 25) { |smtp| smtp.send_mail(message, fromaddr, toaddr) }
- commit-email.to.yml
- aaa@example.com - bbb@example.com
参考
http://f29.aaa.livedoor.jp/~yamakan/index.php?LinuxSettingMemo%2F%A5%C7%A5%A3%A5%B9%A5%C8%A5%EA%A5%D3%A5%E5%A1%BC%A5%B7%A5%E7%A5%F3%B6%A6%C4%CC%2FSVN%28Subversion%29%A5%B3%A5%DF%A5%C3%A5%C8%A5%E1%A1%BC%A5%EB%C0%DF%C4%EA
http://www12.atpages.jp/~nekomike/blog/page/4/?cat=3
http://d.hatena.ne.jp/turipat/20090704/range_and_slice
第6回 YAMLファイルの扱い方 - WebデザイナーのためのRuby on Rails - Ruby on Rails with OIAX