tracとquickMLの連携

qwikWeb は素晴らしい。エンドユーザーにもわかりやすくて良い。quickML部分の仕様は、実際の運用形態を考えたら、たいていの場合はこれで必要十分なんだよね。そして、qwikWebだ。wikiページとMLへのポストを一緒に扱えるのは良い。

で、ソフトウェア開発においては、tracでこういう機能を使えたらもっといいんじゃないかと思う。tracメーリングリストの連携については MailArchiveプラグイン が秀逸だ。でも、これ自体にはメーリングリストの管理機能は無い。そこで、将来はquickML/qwikWebtrac pluginにportすることを見据えつつ、まずはメーリングリスト機能にはquickMLを利用し、tracと連携させることにした。

まずはMailArchivePluginをインストール。mailarchive-admin.pyを/usr/local/binに配置した。 そして、

require 'tempfile'

QuickML::Group.class_eval do
  def _submit_with_trac_posting(mail)
    _submit_without_trac_posting(mail)

    Tempfile.open('quickml-to-trac') { |f|
      now = Time.now.strftime('%a %b %d %H:%M:%S %Y')
      f.puts "From #{mail.mail_from} #{now}"
      mail.each_field do |name, value|
        f.puts "#{name}: #{value}"
      end
      f.puts
      f.puts mail.body

      f.flush

      command = [
        "python",
        "/var/trac/projects/#{self.name}",
        " import",
        self.name,
        f.path
      ].join(' ')
      @logger.log command
      @logger.log `#{command}`
    }
  rescue => err
    @logger.log "error: #{err.message}"
  end
  alias_method :_submit_without_trac_posting, :_submit
  alias_method :_submit, :_submit_with_trac_posting
end

これをqwik/group.rbにrequireさせればOK。 パスとかはハードコードしちゃってるけど。tracのenvironmentとメーリングリストが同名であると仮定。というか、その方が使いやすいと思うよ(Convension over Configuration!)

以上で、メーリングリストにポストすればそれがtracのほうでもMailArchivePluginを使って閲覧できるようになる。