2011-12-21 :-(
_ [fswiki][FreeStyleWiki][hikifarm]fswiki の項目の日付がアレだったので hikifarm に整合させた
新規作成してコピペなどして [ 20111214#p04 ] 日付が 2011-12-14 になってしまったので hikifarm に日付を整合させることにした。
hikifarm で表示される各項目の日付は、hikifarm/foobar の下の各項目ファイルの mtime を取得しているぽい。
fswiki で表示される日付も、各項目のファイルの mtime を使っているぽい。
上部メニューの「一覧」は lib/File/Listing.pm か。これは fswiki/data/foobar 下の各項目ファイルの mtime を基にしているらしい。
use File::Listing;
for (parse_dir(`ls -l`)) {
($name, $type, $size, $mtime, $mode) = @$_;
next if $type ne 'f'; # plain file
#...
}
Menu で recentdays プラグイン plugin/recent/RecentDays.pm を使ってるんだが、これは fswiki/config/foobar/modtime.dat のファイルに各項目ファイル名とシステム起算時間が書かれていて、そこから項目の日付を取得している。たとえばこう。ファイルのエンコードは EUC-JP
"currentを追跡する"="1290914431" "crunch binary"="1216980765" "PF"="1288531936" "和訳されてない文書"="1257858585" "VMware"="1213184522" "misc"="1215782506" "md"="1216555421" "Xen"="1291635998" "InterWikiName"="1213183731" "pkgsrc"="1304407352" "X"="1213184253" "NetBSD/hpcsh"="1213184804" "SideMenu"="1213183731" "LANDISK"="1236673032" "FrontPage"="1295002136" "Diskless"="1213184236" "電源管理"="1213184146"
というわけで以下のようにする。
- hikifarm/foobar を元にする
- fswiki/data/foobar の項目ファイルの mtime を設定
- fswiki/config/foobar/modtime.dat に各項目ファイル名とシステム起算時間を記述
各項目ファイルの名前は URL エンコードされているので適当にデコードする。
テキトーにこんな。エラー処理とかしてないんで
#!/usr/pkg/bin/ruby -Ku
require 'pp'
require 'nkf'
require 'cgi'
def collect(dirpath)
files = {}
Dir.chdir(dirpath) {|path|
Dir.glob("*") {|file|
files[file] = File.stat(file)
}
}
return files
end
def update(dirpath, files)
Dir.chdir(dirpath) {|path|
files.each { |filepath, stat|
f = filepath + ".wiki"
next unless File.exist?(f)
File.utime(stat.atime, stat.mtime, f)
}
}
end
def write(datpath, files)
str = ""
files.each { |filepath, stat|
f = CGI.unescape(filepath)
i = stat.mtime.to_i
fe = NKF.nkf( '-e', f )
str << "\"#{fe}\"=\"#{i}\"\n"
}
File.open(datpath, "w").write(str)
end
def main(argv)
hikidir = argv[0]
fswikidir = argv[1]
Dir.glob("#{hikidir}/*") { |dent|
next unless File.directory?(dent)
basename = File.basename(dent)
srcdir = "#{dent}/text"
dstdir = "#{fswikidir}/data/#{basename}"
datpath = "#{fswikidir}/config/#{basename}/modtime.dat"
next unless File.exist?(dstdir)
files = collect(srcdir)
update(dstdir, files)
write(datpath, files)
}
end
main(ARGV)
みたいな
% ./mtimer.rb ~/usr/local/var/hikifarm ~/public_html/fswiki
[ツッコミを入れる]



