aftercommit version 0.1.0 Copyright (C) Katsuhiro Ueno 2000 Mar 13, 2000 $Id: README-aftercommit,v 1.1 2000/06/15 16:28:39 katsu Exp $ aftercommit は CVS の loginfo ファイルを用いて行う操作を 支援するための Ruby スクリプトです。 == 必要なモノ (多分) cvs-1.10 以降 ruby-1.4.3 以降 == インストール システム環境に合わせて aftercommit.rb の先頭を変更して下さい。 どこをどう変更すれば良いかはコードから類推するべし :-) あとは、aftercommit.rb と lib を同じディレクトリに置くだけ。 パーミッションを変えたり .rb を取ったりはお好みで。 ほら、簡単でしょ? == 使い方 loginfo, commitinfo ファイルを弄って、aftercommit.rb が起動されるように 設定して下さい。 commitinfo の 例: DEFAULT /usr/bin/ruby /home/cvs/aftercommit/aftercommit.rb -C -u $USER loginfo の例: DEFAULT /usr/bin/ruby /home/cvs/aftercommit/aftercommit.rb -u $USER -m sakura@kinomoto.hoe %{sVv} 注意: commitinfo では必ず -C オプションを付けて下さい。 loginfo のフォーマット文字列には %{sVv} 以外を指定しないで下さい。 == オプション -C, --commitinfo commitinfo モードで起動します。 -C オプションの無いときは loginfo モードになります。 -h, --help ヘルプメッセージを表示します。 -q, --quiet 標準出力にメッセージを出力しません。 commitinfo モードではデフォルトです。 -v, --verbose 標準出力にメッセージを出力します。 loginfo モードではデフォルトです。 -u $USER, --user=$USER ユーザー名を指定します。 -u オプションの無いときはプロセスの実ユーザー名を使用します。 -u オプションを指定する場合は commitinfo, loginfo の両方で 同じユーザー名を指定するようにして下さい。 -s [:] --smtp-server=[:] メール送信に使用する SMTP サーバのホスト名とポート番号を指定します。 -m , --mail-addr= commit 通知メールの送信先を指定します。 コンマで区切れば、複数のメールアドレスを指定することができます。 -m オプションが指定されていない場合はメールの送信を行いません。 通知メールは 1回の cvs commit につき 1通となります。 -l , --logfile= ログファイルを指定します。 このファイルには commit 通知メールと同じ内容が書き加えられます。 -l オプションが指定されていない場合はログの追加を行いません。 ちなみに、絶対パスで指定したほうが確実です。 -E, --euc -S, --sjis -J, --jis ログファイルの文字コードを指定します。 -c , --command= メール送信後に実行するコマンドを指定します。 余談: & をつけると確かにバックグラウンドで動作するんだけど、 pserver を使っている場合はどうも勝手が違う。 pserver 側の commit は終わっている (ロックも消えてる) にも 関わらず、手元の cvs commit は終了しない。どうやら 標準出力か何かがソケットに繋がっていて、それを開いたまま バックグラウンドプロセスを exec しているのが原因っぽい。 ボヤキ: なので、system を使わずに fork して 0, 1, 2 を close してから exec してみる…が、状況は変わらず。 どーしたもんやと調べてみると、通信用か何かのファイルディスクリプタが 7, 8 個開いたままになってるやないの。そりゃー、ひっかかるわ。 仕様なのかタコいだけなのかは知らんけど、この動作は気に食わん。 commit 以外ではこうならないんで余計に不満。 ちなみに: -c オプションを使って cvs update する場合は、必ず & をつけて バックグラウンドで走らせること。でないとロックにひっかかります。 update 前の sleep は無くてもよいみたい。しかし一瞬だけロックが 重なるはずなので、pserver を使っているのであれば数秒の sleep を 入れておいたほうが無難っぽいです。 なんつってもロック待ち 30 秒は敵わんので (^^; == 使用例 どんな場合でも、commitinfo にはこれ以外に書くことは無いです。 あとは、-u $USER を付けるか付けないか、だけ。 ... aftercommit.rb -C -u $USER commit 後、sakura@kinomoto.hoe に通知メールを送る。 ... aftercommit.rb -u $USER -m sakura@kinomoto.hoe %{sVv} commit 後、/home/cvs/ChangeLog にログを残す。 文字コードは EUC-JP を使用。 ... aftercommit.rb -u $USER -E -l /home/cvs/ChangeLog %{sVv} commit 後、/home/cvs/public_html を cvs update する。(最後の & がミソ) ... aftercommit.rb -u $USER -c 'sleep 2 && cd /home/cvs/public_html && cvs -Q update -Pd &' %{sVv} そして複合技。 ... aftercommit.rb -u $USER -m sakura@kinomoto.hoe -E -l /home/cvs/ChangeLog -c 'sleep 2 && cd /home/cvs/public_html && cvs -Q update -Pd &' %{sVv} == 注意 commitinfo 等の commit 前チェックにひっかかると、テンポラリファイルが 削除されずに残ったままになる場合があります。 たまに掃除してやって下さい :-) == ToDo (-) 何を差し置いてもまず英語が変 (^^ (-) そしてメソッド名までもが変 (^^;;;; (-) aftercommit.rb って名前はちょっと長いかなぁ… (-) もっとソースを整理したほうが良さげ。OOP しませう。 こういうスクリプトは使う人がコードレベルでカスタマイズして ナンボですからね。 == 配布条件 Ruby の配布条件と同じです。 ----