Debian だとはじめは Ruby とか入ってないと思うので入れます.
apt-get install ruby apt-get install rubygems gem install tlsmail apt-get install libopenssl-ruby
リポジトリの ./hooks にある post-commit.tmpl を post-commit という名前で同じディレクトリにコピーし,中身を書き換えます.
$ cat post-commit #!/bin/sh # POST-COMMIT HOOK # # The post-commit hook is invoked after a commit. Subversion runs # this hook by invoking a program (script, executable, binary, etc.) # named 'post-commit' (for which this file is a template) with the # following ordered arguments: # # [1] REPOS-PATH (the path to this repository) # [2] REV (the number of the revision just committed) # # The default working directory for the invocation is undefined, so # the program should set one explicitly if it cares. # # Because the commit has already completed and cannot be undone, # the exit code of the hook program is ignored. The hook program # can use the 'svnlook' utility to help it examine the # newly-committed tree. # # On a Unix system, the normal procedure is to have 'post-commit' # invoke other programs to do the real work, though it may do the # work itself too. # # Note that 'post-commit' must be executable by the user(s) who will # invoke it (typically the user httpd runs as), and that user must # have filesystem-level permission to access the repository. # # On a Windows system, you should name the hook program # 'post-commit.bat' or 'post-commit.exe', # but the basic idea is the same. # # The hook program typically does not inherit the environment of # its parent process. For example, a common problem is for the # PATH environment variable to not be set to its usual value, so # that subprograms fail to launch unless invoked via absolute path. # If you're having unexpected problems with a hook program, the # culprit may be unusual (or missing) environment variables. # # Here is an example hook script, for a Unix /bin/sh interpreter. # For more examples and pre-written hooks, see those in # /usr/share/subversion/hook-scripts, and in the repository at # http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and # http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ export LANG="ja_JP.UTF8" REPOS="$1" REV="$2" ${REPOS}/hooks/commit-email.rb "$REPOS" "$REV"
このファイルの中で呼び出している commi-email.rb は次の内容にします.
メールアドレスとかは適宜書き換えて下さいね.
$ cat commit-email.rb #!/usr/bin/ruby -Ke require 'rubygems' require 'net/smtp' require 'kconv' require 'tlsmail' 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 =['ふが@mail','ほげ@mail'] fromaddr=['ほがほが@mail'] 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: Subversion Committers: #{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.enable_tls(OpenSSL::SSL::VERIFY_NONE) Net::SMTP.start("smtp.gmail.com", 587, "localhost.localdomain", "メールアドレス", "パスワード", "plain") { |smtp| smtp.sendmail(message, fromaddr, *toaddr) }
これで自分のサーバに SMTP サーバがなくても Gmail の SMTP サーバを使ったメール送信ができるはずです.
修正
メール送信がエラーになるので次の部分を書き換えました.
toaddr =['ふが@mail,ほげ@mail']
でも本文の方の書き方だと送信先メールアドレスが,で繋がらずおかしなアドレスになってしまう.
修正
送信先メールアドレスが , で繋がるようにしました.
To: Subversion Committers: #{toaddr.join(',')}, ;
なんだ,こんなしょーもないことだったのか.