昨日、とある方法でリポジトリに足したファイルが、subversionのOS的な制限を超えていたため、ワーキングディレクトリが変な状態になるという痛い目に会いました。
どういうことかというと、subversionはメタデータを .svn ディレクトリの下に作りますが、メタデータの対象となるファイル名に最大9文字のサフィックスを追加します。(たとえば、".svn-base")。Unix系のシステムで、ファイル名(いわゆる、ディレクトリ内のファイル名 - base name)が、この長さを超えていて、かつ、255文字以下だと、ファイルをコミットできるけれど、チェックアウトやアップデートできなくなって、とても痛いことになります。はっきりいって、バグとも言える。
で、こうなっちゃったら、リネームするか削除するしかないんですが、これが漢字つかってるファイルだと、漢字のファイル名指定するのに、たとえば、svn ls の結果を、locale合わせた状態で食わせ直しても(たとえば、svn rm `svn ls | fgrep PATTERN` なんてやる) 旨くファイルを見つけられなくなることがあります。特定条件の下で指定できないこと自体は、MacOS X のHFS+ 固有のエンコーディング変換の問題らしいという話もあります(Bug#2464参照)。どうも、アクセント記号の組み合わせとかの問題のようですけどね。
で、この問題から逃げるのに、メーリングリストで聞いたら良い方法おしえてくれました。
話は単純で、http的にrepositoryが見えてるなら、当該ファイルのURLをブラウザで開くと、%エンコードされたURLが手にはいるので、それをコマンドラインで食わせれば、svn が理解できるパス文字列になることを利用するのです。
おかげで、問題解決できました。。久々にメーリングリストでクイックに返答得られて、ハッピーです。
なるほどぉ~!って言われればですが、面白いね。