Redmine の SCMの文字コード その1

ってことで、Mercurialはレビュー待ちで、gitよりも先にファイルシステムSCMの方が簡単か、と思ったが、簡単ではない。
下調べは終わったが、相当複雑なので、まずMercurialについて、基本方針をまとめる。

で、Windows簡体字と自分がSJISでテストしているから、SJISダメ文字を多分除いて大丈夫。
SJISダメ文字は多分だめ。直そうと思えば直せなくもないがめちゃくちゃ優先度は低い。てか、後述のテストリポジトリとテストの作りようが無い。

で、テスト作るにはやっぱりlatin-1でしょ、ってのの方針は以下の通り。

で、Mercurialのdiff/cat/blameはコマンドラインをローカルエンコーディングで指定しないといけないんだが、まぁ、実績があるからエンコードがあって入れば大丈夫だろうね、という前提。

んで、Subversionがどうしているのか見てみたら、utf-8のパーセントエンコーディングなんだね。知らなかった。

ここまでの前提はMercurial本体が少なくともPython 2の現状においては、内部ではワイド文字は一切扱っていないという前提でもあって、コマンドライン引数もいじっていないという前提でもある。

だから、fixutf8がコンソールをutf-8にすれば、コマンドライン引数がutf-8で動く理由でもある。


で、本来Windowsで外部コマンドを叩く場合、呼び出し元も呼び出し先もワイド文字にしないといけない。
ってことは、上記簡体字SJISで動いたってのは、RubyANSIで呼んでいるってことだ。