hiki 1.0.0 続き
hiki 1.0.0に移行するために、CVSリポジトリそのものを移行する方法があります。そのためのスクリプトを書きました。
#!/usr/bin/env ruby $LOAD_PATH.unshift "." require "optparse" require "pathname" require "fileutils" require "nkf" require "hiki/util" require "hiki/config" def convert(cvsroot_path, input_encoding, output_encoding, nkf) Dir.glob("#{cvsroot_path}/hiki/*,v").each do |old_file_fullpath| begin dir = File.dirname(old_file_fullpath) old_file = File.basename(old_file_fullpath).chop.chop new_file = Hiki::Util.escape(encode(Hiki::Util.unescape(old_file), input_encoding, output_encoding, nkf)) print "#{old_file} => #{new_file} " cont = nil File.open("#{dir}/#{old_file},v", "r:#{input_encoding}") do |fin| cont = fin.read.force_encoding(input_encoding) end FileUtils.rm_f("#{dir}/#{old_file},v") File.open("#{dir}/#{new_file},v", "w:#{output_encoding}") do |fout| fout.write encode(cont, input_encoding, output_encoding, nkf) end puts "OK." rescue StandardError => ex puts " NG." puts "#{ex.class}: #{ex.message}" puts ex.backtrace end end end def encode(text, input_encoding, output_encoding, nkf) if nkf NKF.nkf("-m0 --ic=#{input_encoding} --oc=#{output_encoding}", text) else text.dup.encode!(output_encoding, input_encoding, :invalid => :replace, :und ef => :replace) end end def main(argv) parser = OptionParser.new cvsroot_path = nil input_encoding = nil output_encoding = nil nkf = false parser.on("-c", "--cvsroot-directory=DIR", "Specify the cvsroot directory"){|d ir| cvsroot_path = Pathname(dir).realpath } parser.on("-i", "--input-encoding=ENCODING", "Specify the input encoding"){|en coding| input_encoding = Encoding.find(encoding) } parser.on("-o", "--output-encoding=ENCODING", "Specify the output encoding"){| encoding| output_encoding = Encoding.find(encoding) } parser.on("--nkf", "Use NKF (default: no)"){ nkf = true } begin parser.parse!(argv) rescue STDERR.puts $!.class.to_s STDERR.puts $!.message exit 1 end convert(cvsroot_path, input_encoding, output_encoding, nkf) end if __FILE__ == $0 main(ARGV) end
構造はほとんどconvert.rbから借りてきました。
これで変換した後でチェックアウトすれば更新完了です。過去の履歴も見られるし、快適。