Seasons.NET

ちょっとした技術ブログです

ChangeLogを自動で書き込みたい(2)

結局、家で試行錯誤した結果、
svn のポリシーとして、svnlookでログを閲覧できるけど、エントリーファイルに対して、
svnクライアントから書き込むことはできない。

なので、以下の手順ならば、ChangeLogを自動で書き込むことに成功した。

1.いったんChangeLogをサーバー側のリポジトリに落としておく。
(具体的には、dbとかhookとかあるフォルダにlogとか作って、+そこ(log)にChangeLogをチェックアウトしておく。)


2.チェックアウトした(log)フォルダ内全てのアクセス権限を777 とかにして、ユーザーがいじれるようにしておく


3.post-commitをカスタマイズ。


3-1.post-commit内で先ほど落としたChangeLogのパスを取得し、
 (自分の場合は、post-commitがRubyスクリプト)そのファイルをオープンして、
 今コミットされたリビジョン+ログ内容を追加書き込みして保存する。


3-2.その保存したChangeLogは、当然svn管理下で落としているので、変更扱いとなる。
 変更扱いということは、コミットできるわけで、
 post-commit内でsvn commit -m "ChangeLog Update!!" /xxx/xxx/ChangeLog
 って感じでコミットを実行する。
 ちなみにRubyなら以下のコードでそれができる

%x{svn commit -m "ChangeLog Update!!" /xxx/xxx/xxx/ChangeLog(実際には、ChageLogのパス)}

 このとき、実行時のユーザーは、svnユーザーなので、ChangeLogをコミットするには、ユーザーレベルでの書き込み権限を
 もたせておかなくてはいけない。そのために、chmod 777 が必要だったわけです。


4.post-commit内でChangeLogのコミットを行ったので、実際には、以下の2つのメールが届く

    • 変更ファイルリストのコミットメール
    • ChangeLogのコミットメール

さすがに毎回届くのはじゃまなので、ログの先頭に+などが付いていたらChageLogもコミットするなどして
フィルタしておいたほうがよい。

また、自分みたいに各プロジェクトで扱うpost-commitをシンボリックリンクで同じものを参照している場合は、
プロジェクトごとのChangeLogに書き込まないといけないわけですが、その場合は、工夫が必要なので注意。