- 2008年11月 6日 02:28
- しらべる
会社の古いサーバー(Fedora4)でRedmineをSubversionとからめて運用しようとしたときに、はまった点をメモ。
リポジトリビューワーがいまいちうまく機能しない。リポジトリ自体は表示されるのだけど、リビジョンを参照できないし、コミットログにチケット番号を埋めてもチケットに関連するリビジョンが表示されない。どうやらリビジョンが拾えていない様子。
それだとコミットフックで自動クローズとかができずSVNをからめるうまみがない。
原因を探ってみた。(URL等はふせてあります。)
ログを見る(Passengerを使っているので、Apacheのログです。)
$ tail -300f ./apache/logs/error.log svn: PROPFIND (URL: '/svn/example'): サーバに接続できませんでした (http://www.example.com) サブコマンド 'info' にはオプション '--xml' をつけられません。 使用方法を知りたいときは 'svn help info' と打ってください。 サブコマンド 'info' にはオプション '--xml' をつけられません。 使用方法を知りたいときは 'svn help info' と打ってください。
ん、、もしかして。。。
Subversionのバージョンを調べてみる
$ svn --version svn, バージョン 1.2.3 (r15833) コンパイル日時: Aug 26 2005, 03:42:45
しらべてみたら、svn info の --xml オプションが使えるのは Subversion 1.3以降からだ。。。
Subversionのアップデート
# yum update subversion Setting up Update Process Setting up repositories updates-released 100% |=========================| 951 B 00:00 extras 100% |=========================| 1.1 kB 00:00 base 100% |=========================| 1.1 kB 00:00 Reading repository metadata in from local files Could not find update match for subversion No Packages marked for Update/Obsoletion
、、、Fedora4でサポートされているSubversionのパッケージは1.1.4までだ。。
SVNサーバーは運用中なので、ソースからコンパイルするのは厳しい。
ぽくぽくぽく、、
ちーん
redmineのSVNアダプターを書き換えちゃえ。
ということで、
svn info --xml オプションの出力をXMLパースしている部分を
svn infoにして、出力を自力パースするように変更
lib/redmine/scm/adapters/subversion_adapter.rb で実装されている
SubversionAdapterクラスのinfoメソッド内
shellout(cmd) do |io|
begin
doc = REXML::Document.new(io)
#root_url = doc.elements["info/entry/repository/root"].text
info = Info.new({:root_url => doc.elements["info/entry/repository/root"].text,
:lastrev => Revision.new({
:identifier => doc.elements["info/entry/commit"].attributes['revision'],
:time => Time.parse(doc.elements["info/entry/commit/date"].text).localtime,
:author => (doc.elements["info/entry/commit/author"] ? doc.elements["info/entry/commit/author"].text : "")
})
})
rescue
end
end
となっている部分を
elements = []
shellout(cmd) do |io|
begin
io.each_line do |line|
next unless line =~ %r{^\s*(\S+)\s*(:)\s(.*)$}
elements << $3.strip
end
info = Info.new({:root_url => elements[2],
:lastrev => Revision.new({
:identifier => elements[3].to_i,
:time => Time.parse(elements[7]).localtime,
:author => (elements[6] ? elements[6] : "")
})
})
rescue
end
end
1行ごとに読みこんで、文字列分解してオブジェクトに突っ込む感じにします。
これでApacheを再起動。
おお!チケットに関連するリビジョンが表示されています。
リポジトリビューワーにも関連するコミットログが記載されました。
めでたしめでたし。
チケットの関連リビジョンは、一度リポジトリビューワーを表示しないと更新されないようなので、以下サイトを参照。
「リポジトリ」を開くまでSubversion等のリポジトリへのコミットが「活動」に表示されません
redMine で trac の trac-post-commit-hook のような事をやる
