ruby-trunk-changes r37051 - r37057

今日は refinement の不具合修正がありました。

shirosaki:r37051 2012-09-29 02:32:06 +0900

昨日の r37050 で test/ruby/test_unicode_escape.rb で非ASCII文字を外部コマンドの echo で表示しようとしているところが Windows ではうまくいかなかったので ruby を使って出力させるようにしたのですが、今度は Unix(非Windows と言うべきか)で環境変数 LANG=C の時に失敗してしまったので RUBY_PLATFORM で分岐するようにしています。 [ruby-core:47709] [Bug #7076]

svn:r37052 2012-09-29 02:32:12 +0900

version.h の日付更新。

shugo:r37053 2012-09-29 11:21:27 +0900

メソッド探索前に refinement の影響を考慮するために呼ばれる rb_vm_using_modules で第2引数が T_CLASS の時も rb_using_modules() を呼んで using しているクラスの継承リストを複製して変更するようにしています。 r37040 で refine に Class を渡せるようになったのでその追随でしょうか。テストをみるとそうではなくて既存の不具合の修正のようですね。

shirosaki:r37054 2012-09-29 20:18:57 +0900

r37051 で test/ruby/test_unicode_escape.rb で LANG=C の時に ruby で出力させるのに失敗したので RUBY_PLATFORM で分岐するようにしましたが、ruby の -e オプションにマジックコメントも追加してエンコーディングを指定することでプラットフォームに依存せずにすむようにしています。 [ruby-core:47709] [Bug #7076]

shirosaki:r37055 2012-09-29 20:19:02 +0900

drb のテストで起動したプロセスを停止するのに Windows 版では Process.kill に :INT を渡すようにしていましたが、これを :KILL に変更しています。 new_pgroup を false に指定して起動したプロセスに INT を呼ぶのはWindows 7 では SIGINT が黙って失敗し、Windows XP では EINVAL を返すとのこと。 CRuby の Windows 版は SIGINT はエミュレートしているので使うとしたら SIGINT ときいたことがあるので少し不思議ですね。

shirosaki:r37056 2012-09-29 20:19:06 +0900

Net::HTTP のテストで http_proxy などの環境変数を利用したテストを clean_http_proxy_env というメソッドのブロックのなかに入れて、環境変数が設定されていない状態にして実施するようにしています。

shirosaki:r37057 2012-09-29 20:19:11 +0900

テスト用のユーティリティメソッド EnvUtil#invoke_ruby で子プロセスの終了前にタイムアウトした時に Timeout::Error 例外を発生させる前に子プロセスにシグナルを送信するようにしています。 Windows版で子プロセスが生きていると rmdir, mktmpdir が EACCES で失敗するからだそうです。Unix 系の場合だとシグナルを送信してもすぐに終了するとは限らないと思いますが、Windows 版では大丈夫でしょうか。
また Windows XP で時間がかかるテストのタイムアウトをのばしています。