SVN::TracWiki #0

SVN::TracWiki というツールをつくってみました。svn repos はこちら

何をするものかというと、Subversion の post-commit スクリプトとして動作して、コミットされたファイルからテキストを抽出、そのファイルの実体へのリンクを付加して、Trac の Wiki へ自動ポストするというもの。

具体的な例としては、PowerPoint ファイルをコミットしたら、そのファイルからテキストのみを抽出して Wiki へ自動ポスト。こんな感じで

これで何がうれしいかというと、Subversion で管理している PowerPoint ファイルを、Trac 上で検索ができるようになります。こんな感じですね。元ファイルへのリンクもあるので、検索して元ファイルを開いて読む、ってことが簡単にできます。

例によって YAMLで設定 and プラガブル。ファイルからテキストを抽出する部分がプラグインになっていて、簡単に拡張できるようにしています。

現在は PowerPoint 用フィルタプラグインしかないのですが、以下の様なコードになっていて、フィルタ対象ファイルの MIME タイプを register() で指定、テキスト抽出ルーチンを filter() に記述、という感じで書きます。

package SVN::TracWiki::Plugin::Filter::PowerPoint;

use strict;
use warnings;
use base qw( SVN::TracWiki::Plugin::Filter );
use Encode;

sub register {
    my $self = shift;
    $self->register_mime_types( qw! application/vnd.ms-powerpoint !);
}

sub filter {
    my ( $self, $file ) = @_;
    my $html = `/usr/local/bin/ppthtml $file`;
    my $text = $self->strip_html($html);

    $text = Encode::decode('utf8', $text);
    $text = Encode::encode('utf8', $text);

    return $text;
}

1;

とりあえず動くようになっただけで、いけてない部分盛りだくさんですが、こんなのつくってみました、ってことで。