2009年2月25日水曜日

Mercurialでwin32text extentionを使うときに注意すること

win32text extentionを使う場合は、すべてのリポジトリで使った方がいい。
win32text extentionを使っていない環境でCRLFを追加してwin32text extentionを使っている環境に
持ってくるとすべての行が変更されたことになる。(リポジトリの改行はCRLFでファイルは変換されてLFになるため)
こうなった場合は、CRLFのファイルだけwin32text extentionを使わないようにするか、win32text extentionを使わないようにしてrevertするしかないと思う。

ちなみにCRLFのファイルを登録しないようにするには、win32text extentionを有効にして、
設定ファイルに
[hooks]
pretxncommit.crlf = python:hgext.win32text.forbidcrlf
と書けばいい。
そうするとCRLFのファイルがあるとcommitできなくなる。

2009年2月22日日曜日

Mercurialでファイル名に0x5cがあるとコミットできない

2chで話題になっていたんで試してみたら見事にcommitできず。
環境は、mercurial 1.1.2 windows win32mbcs extention有効状態
直接ファイル名を指定するとcommitできるけど、
hg commitだと追加したファイルだと認識されない。
原因はutil.pyでファイル名とディレクトリを分ける処理でrfind(sep)としているから。
これ以外にもフォルダ名の終端が'0x5c'だとabortしたりと悲惨なことになってた。
原因はosutil.cの_listdirでファイル名の終端がセパレーターか調べているところで、最後の文字がマルチバイトか調べてないから。

win32mbcs extentionが出て来たころはここまで酷くなかったと思ってたんだが。