どうも昨日書いたTimeOffsetの件が気になって朝からまたいろいろ調べてみたらバグらしきものを見つけた。Util.pmのiso2tsって関数でoffset_time_listって関数を呼んでるんだけど引数が違う。。。。実は、offset_timeってのがあって、こちらは時刻とブログのIDと時差補正の方向をもらってるんだけど、offset_time_listは時刻は自分で補完してoffset_timeに渡してる。。つまり、時刻データが2重に渡されてるようだ。ガックリ。時刻が二つ渡されれば、当然一つずつ引数がずれてくるわけで、すると下のMT::Blog->loadが失敗して、$offsetは0になる。。。はず。
....
## Now apply the offset for this weblog.
($s, $m, $h, $d, $mo, $y) = offset_time_list($time, $blog);....
sub offset_time_list { gmtime offset_time(@_) }
sub offset_time {
my($ts, $blog, $dir) = @_;
my $offset;
if (defined $blog) {
if (!ref($blog)) {
require MT::Blog;
$blog = MT::Blog->load($blog);
}
$offset = $blog && $blog->server_offset ? $blog->server_offset : 0;
} else {
$offset = MT->config->TimeOffset;
}
$offset += 1 if (localtime $ts)[8];
$offset *= -1 if $dir && $dir eq '-';
$ts += $offset * 3600;
$ts;
}
で、この呼び出しのところの関数名をoffset_time_listからoffset_timeに変えてみた。が、しかし状況変わらず。。。ソースをgrepしてみると、同じように時刻データをoffset_time_listに渡してるところがたくさんある。。。ここだけじゃないのね。
というわけで、一度ローカルに環境を作って試してみないといまいち確信が持てないし、修正量が多すぎるのでひとまずTimeOffsetでの回避策に戻す。4.2で直ってないのかな?今日の夜にでも試してみよう。
(追記) 解決編はこちらへ。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。