2009年7月10日金曜日

全角文字を含むパスでfixutf8が動かない

日本語が含まれるパスでfixutf8が使えないの続き。
fixutf-jpだとutf-8->unicodeの変換に失敗するとmbcs->unicodeに変換するのでhg initやhg statなどは動く。
しかしcommitが動かない。openにutf-8の文字列を渡しているのが原因。__builtin__.openをフックしてパス名だけをUnicodeに変換すれば動くようにできると思うがやりかたがわからない。

7/11追記
openが動かないのはローカルの環境だった。現状はopenまで行けずos.chdirでこける。
wrapしてないのが原因。os.chdirをwrapするとopenでこける。
__builtins__.openをwrapしてもwrapした関数が呼ばれず__builtins__.openが呼ばれる。

hg-fixutf-jp-patchを更新した。
fixutf8を更新するより、Mercurial内部のファイル名の文字コードをUnicodeに変換してリポジトリのファイル名の文字コードをutf-8にした方が絶対に楽だ。
fixutf8自体ascii以外のファイル名しか想定していない。リポジトリのパスにascii以外の文字コードが入るとを動かなくなる。

0 件のコメント:

コメントを投稿