Friday, November 23, 2007

Subversion Precomposed UTF-8 patch

(2013-02-18: 現在のおすすめは `brew install subversion --unicode-path` (OS X10.8.2, svn 1.7.8 で動作確認))
(2009-08-17: 気がついたら MacPorts にパッチが取り込まれてます。)

前回 Rails on Leopard で紹介したノートの一部でもパッチをあてた Subversion のビルド方法を書いたけど、もう少し詳しく解説します。

簡単に言うと、 Windows を使っている人と Mac を使っている人が Subversion のリポジトリを共有している場合に、 Windows からリポジトリに追加した日本語ファイル名のファイルを Mac で checkout すると svn status などを実行したときにファイルがダブっているように見えて正常に扱えないことがあります。(Mac -> Win の場合でも同様の問題が発生する)

Mac OS X ではファイル名を UTF-8 で保存するときに濁点、半濁点などを decompose (分解) してから保存してしまうために、リポジトリ内のファイル名の文字列と一致しなくなってしまうのが原因。

例えば、「ステージングテスト.xls」という Windows からリポジトリに追加されたファイルを Mac で checkout すると、「ジ」と「グ」は濁点が別の文字として切り離されてファイルシステムに保存されてしまい、リポジトリとワーキングコピーを比較するようなコマンドを実行すると、別々のファイルとして扱われてしまう。

ちょっと話は変わりますが、
僕は仕事で rails のアプリケーションを開発していまして、Tiger のときは VMWare に CentOS(Linux) を入れて、ターミナルから全ての作業をやってましたけど、 Leopard には最初から Rails がインストールされていたりするので、 Mac をネイティブに rails の開発環境として使おうと決心しました。
この Subversion の問題は致命的でした。

Subversion のバグトラッキングシステムには、すでにこの問題(issue - 2464)が2005年12月の段階で指摘されているのにまだ修正(改善?)されていないので、他力本願ではダメだと思い、解決方法を調べてみました。

なんとか到達した僕の解決方法は、svn コマンドが Mac 上でファイル名を扱う時には、ファイルシステムから得られたファイル名の分解された濁点を合成してから行うという方法です。

Apple が配布するバージョンの Subversion へのパッチを当てたバイナリのビルド方法は ココ に書いあります。

手前味噌ですが、Mac から日本語ファイル名を含む Subversion リポジトリにアクセスする必要のある人にとっては必須だと思うので使ってください。

No comments: