12
2009

RedmineのCVSでファイルが見れない問題2

CATEGORY開発環境
またRedmine + CVSの話。

以前、「リポジトリ」からファイル名を選んだ際のリンク先が500になるという話を書いて解決したと思ってたわけだけど、まだ足りなかったのか一部で問題が起きたので続き。
なお、バージョンはまだ0.8.4のまま。最新の0.8.6でどうかは未確認。


ほとんどのファイルは見れるようになっていたのだけど、どうもCVSに登録したばかりのファイル、ようするにリヴィジョンが1.1の初版のファイルだけ、相変わらず500で「リポジトリに、エントリ/リビジョンが存在しません。」というエラーとなる。

前回同様デバッグログを出しつつCVSコマンドを確認。
<cvs> entries 'src/example/view' with identifier 'Mon Nov 09 06:08:39 +0900 2009'
Shelling out: cvs -d :pserver:ユーザ名:パスワード@サーバー名:/cvsrep rls -e -D "2009-11-09 06:08:39" 'root/src/example/view'
という感じのディレクトリに対するrlsコマンドのログが表示されていた。正常に取れるときはこの後に
>>InspectLine ["", "foo.php", "1.1", "Mon Aug 31 04:34:46 2009", "b", ""]
>>InspectLine ["D", "admin", "", "", "", ""]
みたいなログが出ていたので、どうもCVSコマンドが怪しい雰囲気。
実際にコマンドラインから上のCVSコマンドをたたいてみると、
Listing module: root/src/example/view
としか出てこない。ディレクトリ内のファイルが見つけられていなかった。

で、何となく気になったのが "2009-11-09 06:08:39" の部分。どうみてもUTC。
普段CVSコマンド打つときはJSTで指定してうまくいっていたような気がしたので、ためしに+9時間してみた。
Listing module: root/src/example/view

/bar.php/1.1/Mon Nov 9 06:08:39 2009/kv/
予想通りファイル名も取れた。Redmineが入ってるサーバーのタイムゾーンはJST。
ん~、CVSサーバーがCVSNTだから?とか思いつつ調べたらこんな話が見つかった。

68user's page - UNIXの部屋 コマンド検索: CVSトピック編

CVS では日時を UTC (いわゆるグリニッジ標準時) で管理している。cvs log や cvs status で表示される日時は UTC である。ところが cvs checkout・cvs diff・cvs update などのサブコマンドオプション -D は、ローカルタイムとして扱われる。


元々CVSがそういう仕様なわけですか・・・で、それなのにRedmineはわざわざUTCでアクセスしてしまっていると。

設定で対処できるのではと調べたものの、それらしい方法が見つからなかったので、結局Redmine自体のソースに手を入れて対処した。
(Redmineを動かしてるサーバー自体のタイムゾーンを変えれば解決するだろうというのは予測できるが、それは勘弁願いたい。Redmineを動かすユーザーを用意して、そのタイムゾーンだけ変えればよかったか?)

改造箇所は、redmine/lib/redmine/scm/adapters/cvs_adapter.rb の time_to_cvstime メソッド。
        # convert a date/time into the CVS-format
def time_to_cvstime(time)
return nil if time.nil?
unless time.kind_of? Time
time = Time.parse(time)
end
return time.strftime("%Y-%m-%d %H:%M:%S UTC")
end
単純に、CVS用の日付文字列を生成する際に、必ず UTC というタイムゾーンを付加するようにした。
これでCVSに登録したばかりのファイルも無事見れるようなった。
普通に考えて全部UTCとか全部JSTとかいうことはあっても、この処理はUTCでこちらはJST、ということはないと思うので、これで大丈夫だと思う。
数日ちびちびと使っている限りでは特に問題も出ていないので、とりあえずこれでやっていく。
スポンサーサイト

Tag: Redmine CVS

0 Comments

Leave a comment