書いてる人: 高橋カヲル | [mixi] | [PGP] | [TETRiS DS] | [portscout] | [RSS]
波ダッシュ問題にぶつかったときに追加&封印してた機能を実験してみた。
LC_ALL複数回設定してるのもsvnlookが無駄に走ってるのもセンスねーよな。LC_TIME=CとLC_CTYPE=ja_JP.UTF-8とでもすりゃあいいのよ、こんなもの。Date:とMessage-ID:つけるのはMUAの仕事です、当然です。あと、閏秒はcommit時に対処しましょう。
#!/usr/local/bin/ruby
tolist = %w(nobody@example.org nobody@example.net)
fromaddr = 'svn@svn.example.org'
# repos independent settings
smtpserver = 'localhost'
# ARG
REPOS=ARGV[0]
REV=ARGV[1].to_i
toaddr = tolist.join(', ')
ENV['PATH'] = '/bin:/usr/bin:/usr/local/bin'
ENV['LC_ALL'] = 'C'
svnauthor=%x{svnlook author #{REPOS} -r #{REV}}.chomp
svndate=%x{svnlook date #{REPOS} -r #{REV}}.chomp
require 'time'
date = Time.parse(svndate).rfc822
ENV['LC_ALL'] = 'ja_JP.UTF-8'
iconv_command = 'iconv -c -s -f UTF-8 -t ISO-2022-JP'
#iconv_command = 'iconv -c -s -f UTF-8 -t CP932 | iconv -c -s -f SJIS -t ISO-2022-JP'
svnchanged_noconv = %x{svnlook changed #{REPOS} -r #{REV}}.chomp
svnchanged=%x{svnlook changed #{REPOS} -r #{REV} | #{iconv_command}}.chomp
svnlog = %x{svnlook log #{REPOS} -r #{REV} | #{iconv_command}}
svnlog_noconv = %x{svnlook log #{REPOS} -r #{REV}}
if (svnlog == svnlog_noconv && svnchanged == svnchanged_noconv)
charset = 'us-ascii'
else
charset = 'iso-2022-jp'
end
msgid = "<#{Time.new.to_f}%#{fromaddr}>"
require 'net/smtp'
Net::SMTP.start(smtpserver, 25) { |smtp|
smtp.send_mail <<EndOfMail, fromaddr, *tolist
From: #{svnauthor} <#{fromaddr}>
To: #{toaddr}
Subject: #{REPOS} r#{REV}
Date: #{date}
Message-ID: #{msgid}
X-Svn-Repos: #{REPOS}
Content-Type: text/plain; charset=#{charset}
Mime-Version: 1.0
Author: #{svnauthor}
Date: #{svndate}
New Revision: #{REV}
Modified:
#{svnchanged}
Log:
#{svnlog}
EndOfMail
}
ところでencodingやcharsetやらの話してるときにlanguageの話を混ぜられると参るんだけどなんとかなんねーかな。たとえばshineやmakeなんて単体で出されたら日本語か英語かわかんねーって。kachi make hikiwakeって並んでるのとnice make loveと並んでるのとで前者は日本語に見えるし、後者は英語に見えるよおれは。
あとm17nとi18nとをごっちゃにされても参る。gettext方面の話してないときはm17nのことだと思ってりゃいいんだろうか。
Powered by 早起き生活