日本語Windowsでmercurialを使うときは、 win32mbcs よりも fixutf8 を使おう

mercurialに付属する拡張 win32mbcs は、 0x5c 問題は解決してくれるものの、cp932のファイル名をそのままリポジトリに入れてしまうというhgの仕様自体は変えない。
それに対してfixutf8拡張は、ファイルアクセスAPIをごっそりすげ替えてutf8のbyte文字列でファイル名を扱うようにしてしまう。たとえば普通にlistdir()したらcp932のファイル名が帰ってくるところを、utf-8のファイル名が帰ってくるようにしてしまう。
これでリポジトリにファイル名をutf-8で格納できるようになり、非ASCIIファイル名をクロスプラットフォームでやりとりできるようになる。

設計方針が「ファイル名はバイナリ」になってるhgを無理矢理外側から修正する拡張なのでbzrに比べると不安は残るが、hgを使わないといけないプロジェクトが多い現在は仕方ないだろう。
将来的にはhgリポジトリのクライアントをfixutf8拡張を有効にしたhgにするよりもbzr-hgを有効にしたbzrでアクセスする方が良くなる可能性が高い。
Pythonがhgを採用したときのbzr開発陣の反応が「bzr-hgが完成したらリモートリポジトリがhgでもユーザーには関係ないさ」って感じだったし、bzr-svnの効率向上のためにsubvertpyを開発してしまってたり、bzr周辺の開発力は凄まじい。毎月のバージョンアップに追随するのは面倒だけどw

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。