Tracでgit

git

Tracでgitですが、結局躓いていた原因は、trac.iniの設定不足だったようです。
とりあえず、tracでgitが使えることはわかりました♪

1つのプロジェクトに1つのtracで完結。
フォルダごとバックアップをとっておけばそれでOKな手軽さが素敵でまだまだ手放せそうにありません(笑)
(redmineも気にはなってるんですけどね(><)

[components]
tracext.git.* = enabled
...(略)

[git]
cached_repository = true
git_bin = /usr/local/bin/git
persistent_cache = true
shortrev_len = 7

[trac]
...(略)...
repository_dir = /home/apache/git/nekoget/.git/
repository_type = git
...(略)

■躓いた後、うまくいった原因かもしれない事柄は次の2点
(もうすこしきちんとメモをとりつつ、取り組めばよかったなと反省)

サーバ上のgitは1.6.4から1.6.3にダウングレード
(checkinstallでrpmを作成し、インストール)

レポジトリのディレクトリを最初/home/apache/git/nekoget/に作ったのだけれども、うまくいかないので/home/apache/git/nekoget/.git/に変更。

■環境(?)

TRACはTrac 0.11.2.1.ja1
インタアクト株式会社 様が配布くださっている日本語版TRAC

gitは1.6.3
checkinstallでrpmを作成し、インストール

OS:Fedora 8

Python 2.5.1

git21.gif
rootでコミットを試しちゃったのがばれちゃう恥ずかしい画像(笑)

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のコードを読んでみる。
 

Tracを0.11にアップグレード

参考にさせていただいたサイト:http://d.hatena.ne.jp/sotarok/20080825/trac_upgrade_to_0_11

インタアクト株式会社さまが配布くださっている0.10→Trac 0.11.2.1.ja1へとアップグレードしました。

はまったことなど
TracNavがなかなかうまく入らなかった。
python setup.py bdist_eggではうまくいかず、python setup.py installではうまくいった。

svn co http://svn.ipd.uka.de/repos/javaparty/JP/trac/plugins/tracnav-0.11/
cd tracnav-0.11
python setup.py install

不思議なことなど

PythonOption PYTHON_EGG_CACHE /path/to/tracenv/.egg-cache

この記述をhttpd.confには記載していないが、普通に動いてる不思議

追記:ganttcalendarplugin
なかなかうまく動作せず、困っていたわけですが、次のサイトで転がしておいてくださったファイルで正常に動作しました。
http://d.hatena.ne.jp/t-katochin/20080814/1218719974

agg以外はこちらのサイトを参考にしました。
http://sourceforge.jp/projects/shibuya-trac/wiki/plu….

trac.iniに追記

[ticket-custom]
due_assign = text
due_assign.label = 開始日
due_assign.order = 1
due_close= text
due_close.label = 終了日
due_close.order = 2
complete= text
complete.label = 進捗率(%)
complete.order = 3

TRACチケット駆動開発(試行錯誤中)

現在自社サイトリニューアルのため、CodeIgniterでサイトを構築中です。
で、1人作業をしているわけですが、開発タスクのTracのチケットを仕様、設計メモにしてみました。

  • チケット登録時に実装する機能の資料をチケットに記載
  • 関連するDBのテーブル定義
  • コーディングルール(意識して気をつけて書いてる点)
  • Class,function,責務,URLの一覧
  • 各責務の特徴、主な役割
  • 実装作業したリビジョン番号をメモ的に記載

実際に作業をしてみると、作業最中は、作っている機能のチケットのページをずっと開きっぱなしで作業をしてます。

修正すべき項目は即時に修正。
ドキュメントとして保存しておくべき項目をすぐに追記。

そのチケットが終わる頃にはチケットが最終のドキュメントになることを狙っています。
実際作業をしてみると、チケットに書いてある内容を元に、PHPdoc形式で書くのに作業がスムーズでした。
目の前の作業中に目の前に資料がある状態のおかげで作業にも集中できました。

しばらく一人作業の場合はこの方法を練ってみて、
うまくいくようであれば事務所に導入してみようと思います。