TracとSubversionの連動

Tracは、Subversionのリポジトリを管理することができます。そして、コミットした際のログやコミットした人などをタイムラインに反映させることができるのですが、実際にはTracからリポジトリのディレクトリが見えないとならないという仕様です。

 

そこには文句はない。1台でやった方が取り回しも楽だから。

 

しかし、これがまたtracとsubversionのサーバーが分割されたときに「どうしよう」となるわけです。

色々調べてみましたけど、なかなかそれらしい情報がなかったのでちょっと実験がてらsvnsyncで同期したあとにtrac-adminからchangeset modifiedしてみたら、意外とそれっぽい動作になりました。

今回は単一リポジトリですが、マルチリポジトリでも同じような方法でいけると思います。また、外部との接続は一切無い環境を想定していますのでセキュリティ的な意味ではあまりよい方法とは言えないと思います。

ローカルIPからの接続のみ許すとか、ポートを変更してしまうような対処は必要でしょう。

 

前提)

・tracは、apacheなどのwebサーバーを介してアクセスする環境にしておきます。

・subversionにはsyncのために読み出しだけできればOKなアカウントを作っておきます。

・tracのディレクトリは、www-dataなどwebサーバーと同じ読み出し権限にしておきます。

・www-dataからもsudoできるようにしました。(いい方法がわからなかった)

 

1.svnsyncでtracのproject配下にrepository用のフォルダを作ってtrac.iniに設定します。

2.一旦、trac-adminからrepository syncします。これでタイムラインにはsyncしたときまでのログが記録されます。

3.コミットの際にsyncとtrac-adminを動作させるためのスクリプトを書き、webサーバーから呼び出せるようにします。

4.呼び出しは、post-commitスクリプトから、wgetで3.で作ったスクリプトを呼び出します。

 

具体的なスクリプトなどは、それぞれの環境で作り方が違うのでここには載せていませんが、webアプリケーションを作ったことがある人であれば、特に問題なく作れると思います。

wgetで呼び出す際に–output_document = “-“として標準出力にwgetの動作状況を出力しないとpost-commitスクリプトが正しく動作しなくなります。エラーで終了するのでコミットできてないかと勘違いする人も出てくると思いますので注意してください。

それから、3.のスクリプトで重要なのは、外部からの入力文字列などは一切使わないこととそのスクリプトを呼び出す先はできる限り固定して他の場所から呼び出されても実行しないことでしょうか。ローカルネットワーク内でしかお互いアクセスしないくらいでいいのではないでしょうか。

 

というわけで、自分がやったことのメモなのでわかりづらいかもしれませんがヒントくらいにはなるかと思います。

広告

About sato_c

小学生の頃にインベーダーゲームやPC-8001やApple][といったものを知ってしまい、それ以降ずーっとゲーム好き。でも、あんまりうまくはありません。 仕事は当初はゲーム関係のプログラムやサウンドをやっていましたが、WEB関係を通ったあと、遊技機関係のプログラムやサウンドをやっています。あまり節操がないのか。 現在はJavaですてきなコードを書けるように勉強中。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。