May 11, 2008

cvs2svnで文字コードが混在するcharsetを設定する

サーバを移行した際に、ファイルのバージョン管理システムをCVSからより便利なSubversionに移行しました。僕の近辺ではバージョン管理システムを導入している方というのがほとんどいないのが現状ですが、もうこの便利さは嫌というほど思い知らされているので、日付ごとのディレクトリを切って管理をしている様子を見るといつも信じられない気持ちでいっぱいになります(笑)。というわけでこのシステムを使いやすく運用することにはかなり命をかけており、そんな状況での移行でした。

移行については、参考にしたサクラエディタの『cvs2svnによるリポジトリ変換』のようにcvs2svnを使い、なおかつ拡張子に基づいてファイルの種類(svn:mime-type)や文字コード(charset)をcvs2svnに教えてあげるauto-propsという設定ファイルを記述すれば、大抵のことはうまくいきます。しかしながら、ソースの文字コードが混在している(例えばWeb系のスクリプトはUTF-8で、M$関係のソースはMS932(Shift-JISの友達)で等)複数のプロジェクトを管理していたため、auto-propsで拡張子に基づいた文字コードを設定してしまうと、例えばTracなどを使って管理している内容をそのままWebで公開する際に少々まずいことがおきるようです。そこで対策を考えてみました。

はしめはauto-propsの設定ファイルをうまく表現することで対応できないかとも考えてみたのですが、auto-propsが拡張子を基準として動作しているため、この方法では不可能と判断しました。仕方がないのでcvs2svnのソースを改変しようかとも考えたのですが、たまたま上述の参考リンクで行われているcvs2svn --dump-onlyというコマンドで吐き出されるダンプファイルの形式が理解しやすいことを発見したので、これをcvsadmin loadでリポジトリに格納する前に修正することにしました。

修正に用いたRubyスクリプトはcvs2svn_mod_charset.rbです(再利用の際、プロジェクト名は修正してください)。使い方はcat (cvs2svn --dump-onlyしたダンプファイル) | ruby cvs2svn_mod_charset.rb | cvs2admin load where/to/svnrootです。非常に安直なスクリプトですが、ダンプファイルの形式が(同じく安直な)HTTPプロトコルの形式に似ていることもあり、おそらく多くの場合はこれで対応可能だと思います。

10:46 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/639
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。