Home > しらべる > Fedora4 x Redmine x Subversionは罠

Fedora4 x Redmine x Subversionは罠

  • Posted by: memorycraft
  • 2008年11月 6日 02:28
  • しらべる

会社の古いサーバー(Fedora4)でRedmineをSubversionとからめて運用しようとしたときに、はまった点をメモ。

リポジトリビューワーがいまいちうまく機能しない。リポジトリ自体は表示されるのだけど、リビジョンを参照できないし、コミットログにチケット番号を埋めてもチケットに関連するリビジョンが表示されない。どうやらリビジョンが拾えていない様子。

WS000005.jpg

それだとコミットフックで自動クローズとかができず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を再起動。

WS000000.jpg

おお!チケットに関連するリビジョンが表示されています。
リポジトリビューワーにも関連するコミットログが記載されました。
めでたしめでたし。

チケットの関連リビジョンは、一度リポジトリビューワーを表示しないと更新されないようなので、以下サイトを参照。
「リポジトリ」を開くまでSubversion等のリポジトリへのコミットが「活動」に表示されません
redMine で trac の trac-post-commit-hook のような事をやる

Trackbacks:0

TrackBack URL for this entry
http://www.memorycraft.jp/mt-tb.cgi/77
Listed below are links to weblogs that reference
Fedora4 x Redmine x Subversionは罠 from メモリークラフト

Comments:0

Comment Form

Home > しらべる > Fedora4 x Redmine x Subversionは罠

ページの先頭へ戻る