2010-01-12

リポジトリブラウズに、SVNIndexXSLTを利用する

Subversionのリポジトリへのアクセスは、当初はファイルサーバのfile://プロトコルからのアクセスがメインでした。

ですが、次第に利用するメンバが増えてきたことと、ネットワークの制限でファイルサーバにアクセスできない場合に困るということで、http(https)プロトコルを利用してアクセスできるように調整を進めています。

(http経由でのアクセスはApache + mod_dav/mod_dav_svn で設定できます)


さて、リポジトリへのアクセスは、TortoiseSVNやRedmineなどの専用クライアントを使うので、あんまり気にしなくてもいいのですが、たまにブラウザからもリポジトリを参照することがあります。(テキストファイルなどを眺める際は、ブラウザのほうが便利なので)

ただし、基本は素のmod_dav_svnを通しての表示なので、非常に味気ないものになってしまいます
例えに出しては申し訳ないのですが、Redmineのリポジトリなどもそう。

単純にファイル/ディレクトリの一覧が表示されるだけで、初めてリポジトリを使う人には、『なんじゃこりゃ~?』な気がするかもしれません。
使うにしても、ガイドも注意点などもなく、なんだか不親切です。

#別に見るだけなら専用のリポジトリブラウザ、ViewVCとかを使えば良いじゃないの、というご意見もあるかもしれませんが、そうなるとまた別途認証を用意しないといけません…。


ちょこちょこと調べたところ、SVNIndexXSLTというオプションを使えば、リポジトリ情報をXMLで生成し、Lokk&FeelはXSLTでカスタマイズできることがわかりました。単純にブラウザで表示する以外にも、http経由でXMLでデータを取得することができると、何かと便利です。

TortoiseSVNのマニュアルにサンプルがありましたので、いろいろカスタマイズしてみました。
リポジトリのチェックアウト用のアイコンをクリックすると、TortoiseSVNが起動する仕掛けも入っています。(マーカーで囲んだ部分)

キャプチャ2

[ 補足 ]

このXMLのオプションですが、svnコマンドでも、—xml というオプションをつけると、XMLでアクセスできるようですね。

たとえば、こんな感じ。

svn list --xml http://redmine.rubyforge.org/svn/

上記のようにすると、XMLでリポジトリ情報が取得できます。svn log, svn infoなども同じ。

Redmineのソースをよく見ると、リポジトリへのアクセスは、svnコマンドを通して行っています。また、一覧取得には、やっぱり “—xml” オプションを使っています。該当するのは、{REDMINE_ROOT}/lib/redmine/scm/adapters/subversion_adapter.rb の、このあたり。

# Get info about the svn repository
def info
  cmd = "#{SVN_BIN} info --xml #{target('')}"  # <- ここ。 
  cmd << credentials_string
  info = nil
    ..................
end

なるほど…。


でも、やっぱりコミットログや、Authorなどの属性は表示されるわけではないので、あくまでも補助的なものになりますね。

0 件のコメント:

コメントを投稿