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に書き込まないといけないわけですが、その場合は、工夫が必要なので注意。