トップ «前の日記(2006-10-30) 最新 次の日記(2006-11-03)» 編集

Route 477



2006-11-01

[Plagger] PlaggerでCVSのコミットログをIRCに通知する

さて、SVNが出来たらCVSもやりたくなるのが人の常。というか、サークル内のプロジェクトでまだCVS使ってるものも結構あるので。

ところが、CustomFeed::CVSLogってのは今のところ存在しないようだ。CPANならCVSを扱うライブラリくらいあるんじゃないの? と思ったが、なんと $cvs->log() だけ実装されていない。がーん。

仕方が無いので、cvs rlog の出力結果からフィードを生成することにする。 PlaggerのプラグインはPerlで書く人が圧倒的だったけど、Rubyで書かせてもらいます。サイレントマジョリティ(ry

リポジトリのアドレスを渡すと、コミットログをyaml形式(utf-8)で標準出力に出力します。 Plaggerから使うときは以下のような感じで。

plugins:
 - module: Subscription::Config
   config:
     feed:
       - url: "script:/somewhere/customfeed-cvslog.rb /cvs/yhara proj -t 'cvs log of proj'"
 - module: CustomFeed::Script
...

詳細

usage: ./customfeed-cvslog.rb cvsroot repository [options]

cvsrootにはCVSROOTのあるディレクトリを、repositoryにはモジュールを指定します。

オプション:

-r, --reverse
コミットを新しい順に表示します。
-t "hoge", --title "hoge"
フィードのタイトルを指定します。
-d 7, --days 7
何日前のコミットまで表示するかを指定します。デフォルトは2です。2より小さい値は指定できません。

例:

./customfeed-cvslog.rb /cvs/yhara proj -t 'cvs log of proj' -r
./customfeed-cvslog.rb :pserver:anonymous@rubyforge.org:/var/cvs/rrb rrb -d 1000

仕様

基本的にはcvs rlogして、ファイルごとに切って、さらにリビジョンごとに切って、それらをコミットごとに分類している だけです(CVSは複数ファイルのコミットに対して同じログが各ファイルごとに表示されるので、ユーザー名・時刻・メッセージが 同じものを一つにまとめる)。Perlへの移植も別に難しくないと思われます。

(11/3 追記:yamlの例に「url:」が抜けていたのを修正)

[ruby] いやあ

こんなこと(customfeed-cvslog.rb)してるうちに、OptionParserにえらい詳しくなってしまったw usageの表示をカスタマイズできるとか知らなかったよ。

webには載ってないんだけど、 optparse.rbのソースにはもっと長い使用例が書いてあります。OpenStructの便利さに目覚めてしまいそう。