SubversionとWebdavとhocks

subversion
SubversionとWebdavとhocksでwebdavにコミットした内容を、コミットした直後に、動作確認をプロジェクトメンバー皆で確認できる環境が欲しいなと思い、環境を作ってみました。

Webdavの利用
webdavからのオートコミットであるという定型文がコミットログとして保存されます。
大きなメリットとしては、dreamweaverではFTPを使うのと全く同じ操作感でファイルをwebdavへUPすることができます。今まで全くwebdavを使ったことが無い人でもFTPでアップしながらの製作作業を行った経験のある方であれば、全く作業の内容を変えることなく、webdavを利用することが出来ます。
新たに覚えることは、dreamweaverでのwebdavサーバの設定方法だけです。
実際の製作内容で、新たに操作方法を覚えたり、普段と違う作業を行うといったことは一切ありません。

webdavはSVNの連動ではなく、webdav単体で利用する場合、アップされたファイルは指定のURLに保存されます。
apacheの拡張機能で、ファイルの操作をapacheが行うので、当然アップされたファイルはすべてapacheユーザのものになるため、パーミッションの問題が発生することはまずありません。
webdavのアクセス権限を制限するために使用する認証情報(ID,PASS)は、ファイルをアップする時にも使え、また表示確認の際、ブラウザ越しにurlへアクセスする場合にベーシック認証として動作するためID,PASSの管理が容易です。

WebdavとSubversionとの連動
subversionとwebdavを連動するように設定すると、webdavへのファイルアップ(削除も…)=コミットとなります。
自動的にsubversionへコミットしたことになります。
subversionクライアントソフトを使う場合との差は、コミットログの登録ができないことです。

webdavからのオートコミットの場合は次のようなコミットログが保存されます

Autoversioning commit:  a non-deltaV client made 
a change to
/xxxxx/xxxxx.text ←コミットしたファイルのパス

オートコミットしたコードの動作確認?
webdav経由でのオートコミットの場合、そのままではwebdav単体での利用とは違い、即ブラウザから表示確認(動作確認)を行うことが出来ません。表示確認を行う場所を作り、表示確認をするまえにsvn updateを実行する必要があります。
あらかじめ、サーバ上に動作環境としてソースコードをチェックアウトしておき、
subversionの機能で、コミットをしたタイミングで、プログラムを実行させるhocksという機能があります。
これを利用し、あらかじめ用意をしておいたサーバ上の動作環境に対して、svn updateを実行します。

レポジトリを設置したディレクトリ/hocks/post-commit.tmpl というファイルをpost-commitというファイルにコピーをして、実行権限をつけます

# cp post-commit.tmpl  post-commit
# chmod 755 post-commit

hocksで実行するファイルを、レポジトリのフォルダの中に設置場所を作り、そこに置きました。

# mkdir レポジトリのフォルダ/script_hocks/
# chmod 755 レポジトリのフォルダ/script_hocks/
# chown apache.apache レポジトリのフォルダ/script_hocks/

実行するファイルを作成

# vi レポジトリのフォルダ/script_hocks/svnupdate.cgi
#!/usr/bin/env python
import os;
result = os.system("svn update [チェックアウトした場所のパス]");

このままだと、svn updateをするapacheユーザがsvnのアカウントの情報をもっていない状態なのでrootで、一時的にapacheでログインできるようにし、svn updateをチェックアウトした場所のパス上で一度実行します。
順番はこんな感じ。

  • apacheが使用するためのsubvsersionのアカウントを作る。(ID,PASSの発行)
  • 上記で作ったアカウントに対してsubvsersionのアクセス権をつける・・・反映させるだけならreadだけでOK
  • サーバ上で、apacheユーザに対して、シェルを使えるように設定する
  • rootからsu apache で、apacheユーザになり、svn updateを実行する。
    • このとき、subversionのIDとPASSを聞かれます。
    • opensslを使用している場合は、接続を許可するかどうかも聞かれます
  • apacheユーザに対して、シェルを使えなくする
    (/sbin/nologinの設定に戻す)

今回試してみた環境

  • subversion-1.4.4-7
  • httpd-2.2.8-1.fc8
  • python-2.5.1-15.fc8

補足的に・・・・

  • OS Fedora 8 (・・・そろそろ入れ替えたい)
  • Trac 0.11.2.1.ja1

関連記事

–TODO
CodeIgniterでTDDができるようにする!
 CIUnitを使ってみる
 DocTestをCodeigniterで使えないか試してみるとかしてみる。
 MyNETS2のコードを読んでみる。