Mercurialでバージョン管理できねーよ! Pythonの罠?

明日中間発表だというのに、何してるんだか……とか思いつつ。

ここ最近悩んでいたのがMercurialでCommitが出来なくなってました。普通に


>>$ hg init
>>$ hg add

と、ここまではうまく行くのですが、


>>$ hg commit -m "init"
abort: unknown encoding: X-MAC-JAPANESE, please check your locale settings
transaction abort!
rollback completed

となってAbortしてしまいます。んでもっていわれた通りロケール周りを調べてみたわけですが、

>>$ locale
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL="ja_JP.UTF-8"

とまあ、こんな感じ。ということはPythonのほうに何か鍵が隠されているのかといろいろとググったりして調べてみると、どうも locale.getpreferredencoding() が臭い。試しにインタプリタ上で呼び出してみるとX-MAC-JAPANESEの文字列が。
Mercurialのソースを除いてみるとmercurial/util.pyでlocale.getpreferredencoding()を呼び出しているのを発見。しかもどうみてもエンコーディング関係。いつからlocale.getpreferredencoding()を呼び出すようになったかを見るとVersion0.9.2から変わってますね。道理で。とりあえず、HGENCODINGを.bashrcでUTF-8に設定してターミナルを再立ち上げすると今度は無事にコミットされたみたいです。