更新しようと思っていたけどすっかり忘れていた。
理由はコミット時のトランザクションファイルを作成しているところでopenを使っているから、
どうしてもMercurialにパッチを当てないと対応できない。
openerを使わずにopenを使っている理由はどうもopenerにフルパスを渡すと例外が発生するからopenを使っているみたい。
2009年9月27日日曜日
2009年7月15日水曜日
wxPython+Twistedが動かない問題が解決
twisted.internet._threadselect.ThreadedSelectReactor._doSelectInThreadでselectした時にEINTRエラーが発生してスレッドがおかしくなっていた。
_threadselect.py 288行目のreturnをcontinueに変更したら一応動くようになった。
_threadselect.py 288行目のreturnをcontinueに変更したら一応動くようになった。
2009年7月14日火曜日
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以外の文字コードが入るとを動かなくなる。
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以外の文字コードが入るとを動かなくなる。
2009年7月7日火曜日
utf8fixのコマンドライン関連のパッチ
fixutf8を有効にすると --repositoryが使えなくなるバグを修正したパッチをbitbucketに置いた。
tortoisehgでコミットできない原因は削除されるパラメーターが間違っていたわけではなく、
コマンドを実行していなかったのでコマンドラインが取得できなかったのが原因。
hg-fixutf-jp-patch
tortoisehgでコミットできない原因は削除されるパラメーターが間違っていたわけではなく、
コマンドを実行していなかったのでコマンドラインが取得できなかったのが原因。
hg-fixutf-jp-patch
2009年7月5日日曜日
日本語が含まれるパスでfixutf8が使えない
コメントで指摘されてた件ですが、
fixutf8を有効にすると --repositoryが使えなくなる原因でも少し書きましたが、起動時にリポジトリのパスを設定した後、プラグインのロードを行っているため、パスをutf-8に変換できずcp932で保存するためエラーになる。
対処方法としては文字コード判定処理を入れるのが一番簡単かもしれない。
やり方としてはutf-8からUnicodeに変換しているところで今はignoreを指定して変換してるがstrictを指定して変換するように変更し例外が発生したらstrictを指定してlocale.getpreferredencoding()で取得した文字コードからUnicodeに変換しまた例外が発生したらignoreを指定してutf-8からUnicodeに変換する方法が思いついたが責任は持てない。
fixutf8を有効にすると --repositoryが使えなくなる原因でも少し書きましたが、起動時にリポジトリのパスを設定した後、プラグインのロードを行っているため、パスをutf-8に変換できずcp932で保存するためエラーになる。
対処方法としては文字コード判定処理を入れるのが一番簡単かもしれない。
やり方としてはutf-8からUnicodeに変換しているところで今はignoreを指定して変換してるがstrictを指定して変換するように変更し例外が発生したらstrictを指定してlocale.getpreferredencoding()で取得した文字コードからUnicodeに変換しまた例外が発生したらignoreを指定してutf-8からUnicodeに変換する方法が思いついたが責任は持てない。
fixutf8を有効にすると --repositoryが使えなくなる原因
mercurialは起動時にコマンドライン引数の内--config、--cwd、--repositoryオプションの処理をしてコマンドラインから削除してからプラグインのロードを始める。
fixutf8はロードされた際にコマンドラインをUnicodeで取得してutf-8に変換している。
この時に行われるコマンドラインを削除する処理が適当で、--config、--cwd、--repositoryオプションを削除しないといけないのに、削除されたコマンドライン数分前のコマンドラインを削除している。
このためhg -R /home/witten/hg commitのコマンドラインはcommitが残るがhg commit -R /home/witten/hgのようなコマンドラインは/home/witten/hgが残ってしまいそんなコマンドはないとエラーが表示される。
tortoisehgが作成するコマンドラインはhg commit --verbose --repository /home/witten/hg -m logのためエラーが発生する。
fixutf8はロードされた際にコマンドラインをUnicodeで取得してutf-8に変換している。
この時に行われるコマンドラインを削除する処理が適当で、--config、--cwd、--repositoryオプションを削除しないといけないのに、削除されたコマンドライン数分前のコマンドラインを削除している。
このためhg -R /home/witten/hg commitのコマンドラインはcommitが残るがhg commit -R /home/witten/hgのようなコマンドラインは/home/witten/hgが残ってしまいそんなコマンドはないとエラーが表示される。
tortoisehgが作成するコマンドラインはhg commit --verbose --repository /home/witten/hg -m logのためエラーが発生する。
登録:
投稿 (Atom)