daily memorandum 2.3.0
CBUG | FreeBSD | Hiki | Knoppix | Mac | Ruby | W-ZERO3 | Windows | ad | amd64 | ks | linux | momonga | net | print | security | tdiary | unix | www | 会社 | 鯖缶 | 全学ゼミ | 本
2004-07-07 (Wed)
_ [tdiary] tdiary-2.0.0 の不具合 其の二
昨日の続き。*.td2 が消されてしまう問題について。
再現させる方法
- 日記データをまだ置かず、cache も空っぽの状態で日記を表示させる。これで cache ができる。
- 最新の .td2 (今なら 200407.td2)を @data_path 以下にコピー。
- 再び日記を表示させると 200407.td2 が消えている。
- 一旦 cache を消してから 200407.td2 をコピーすると問題ない。
というわけで、まぁコピーする前に cache 消しとけよって 話なのかもしれないけど、 日記データが消えてしまうのはアブなっかしいので、 原因を追ってみた。
原因
今回は割とアッサリ原因が見付かった。 DefaultIO#transaction() の最後で
File::delete( @dfile ) if diaries.empty?
としているのをコメントアウトすれば問題は発生しなくなった。 要するに、cache が空っぽの場合 diaries.empty? が true になるので File::delete が実行されてしまう、と。
で、ここで delete 意図がよくわからないのだけど、 消してしまってもいいのではないだろうか? delete するならするで、
File::delete( @dfile ) if FileTest.zero?(@dfile)
とかするのが正しいんじゃないかという気もするし。
[]
Great site. Keep doing.,