ruby-trunk-changes r50238 - r50270

今日は昨日削除された拡張ライブラリ json が復活された他、拡張ライブラリ io/wait の IO#wait(_readable) の EOF についての仕様変更、Socket/OpenSSL::SSL::SSLSocket の connect_nonblock の :exception オプションの対応追加などがありました。

nobu: r50238 2015-04-12 08:31:48 +0900

r50234 で tool/rbinstall.rb で gem パッケージをインストールする時に環境変数 DESTDIR を利用するようにしましたが、Gem のインスタンス変数 @ruby を上書きする方法に変更しています。

svn: r50239 2015-04-12 08:32:15 +0900

version.h の日付更新。

akr: r50240 2015-04-12 08:52:34 +0900

テスト test/ruby/test_file_exhaustive.rb に File.setuid?, File.setgid?, File.sticky? のテストを追加しています。

akr: r50241 2015-04-12 09:01:11 +0900

ext/-test-/file/fs.c で OpenBSD で sys/mount.h より先に sys/param.h を #include しないといけなかったので追加しています。

usa: r50242 2015-04-12 09:06:20 +0900

r50240 で追加した File.setuid?, File.setgid?, File.sticky? のテストですが Windows ではサポートされていないので分岐を追加しています。

akr: r50243 2015-04-12 09:10:52 +0900

拡張ライブラリ fiddle の depend で OpenBSD の make でエラーになるので .PHONY ターゲットの使いかたを修正しています。

svn: r50244 2015-04-12 09:11:40 +0900

r50243 の ChangeLog エントリの行末の空白除去。

nobu: r50245 2015-04-12 09:24:12 +0900

拡張ライブラリ io/wait の io_wait_readable() と io_wait_writable() からタイムアウト値の引数の処理部分を get_timeout() という関数に切り出して共有させています。

akr: r50246 2015-04-12 09:24:53 +0900

test/ruby/test_file_exhaustive.rb に File.owned? のテストを追加しています。 root ユーザーでなければ(厳密には実効ユーザID が 0 でなければ) "/" の owner ではないので "/" を使うようにしているようです。また Windows ではサポートされないのでテストは分岐しています。

nobu: r50247 2015-04-12 09:53:28 +0900

拡張ライブラリ io/wait の io_wait_readable() と io_wait_writable() から rb_wait_for_single_fd() の呼び出しとエラーチェック部分を wait_for_single_fd() という名称で関数として切り出すリファクタリング

akr: r50248 2015-04-12 09:57:49 +0900

test/ruby/test_file_exhaustive.rb で File.blockdev? が真になるパターンのテストとして "/dev/loop0" もしくは "/dev/sda" があればこれを利用するようにしています。

nobu: r50249 2015-04-12 10:03:30 +0900

r50246 で追加した File.owned? が偽の時のテストとして notownedfile (つまり root ユーザで実効していた時)の分岐が漏れていたので修正しています。

nobu: r50250 2015-04-12 10:13:50 +0900

test/ruby/test_file_exhaustive.rb の主に Windows 向けの分岐の条件判定を POSIX という定数に代入しておいてこれを使いまわすようにして、微妙に条件が漏れていたりするのを修正しています。

nobu: r50251 2015-04-12 10:22:19 +0900

test/ruby/test_file_exhaustive.rb で POSIX の時限定のテストはそもそもテストメソッドを定義しないように分岐位置を修正しています。

nobu: r50252 2015-04-12 10:26:28 +0900

test/ruby/test_file_exhaustive.rb で NTFS の時のみ有効なテストの条件分岐を NTFS という定数に条件を格納して使いまわすようにしています。

akr: r50253 2015-04-12 10:33:19 +0900

r50248 の File.blockdev? が真の時のテストでさらに /dev/vda /dev/xvda1 なども存在すれば利用するようにしています。

normal: r50254 2015-04-12 10:41:51 +0900

Socket および OpenSSL::SSL::SSLSocket の #connect_nonblock で :exception オプションをサポートして connect 時も利用不可の時に例外の発生のかわりに戻り値で知らせることができるようにしています。例外を利用するよりもオブジェクトの生成がなく若干高速になります。 [ruby-core:68838] [Feature #11024]

nobu: r50255 2015-04-12 11:32:10 +0900

test/ruby/test_file_exhaustive.rb で assert_predicate と assert_not_predicate を利用してエラー時によりわかりやすいメッセージになるようにリファクタリングしています。

hsbt: r50256 2015-04-12 13:52:23 +0900

拡張ライブラリ coverage のコメントに require "coverage.so" と拡張子つきで require する例が書かれていたので、拡張子は削っています。 https://github.com/ruby/ruby/pull/870

akr: r50257 2015-04-12 13:55:46 +0900

test/ruby/test_io.rb に名前付きパイプ(fifo) を open する時にそのスレッドが GVL を持ったままブロックしないことを確認するテストを追加しています。 fifo ってデータがないと open するだけでブロックするんですね。

hsbt: r50258 2015-04-12 14:19:22 +0900

ObjectSpace についての rdoc 用コメントのサンプルに require "objspace" を追記しています。 https://github.com/ruby/ruby/pull/860

akr: r50259 2015-04-12 14:22:28 +0900

r50257 で別途独立したテストとして切り出したからだと思いますが fifo のテストで sleep していたのを削っています。 この sleep はそういう意味だったのかー。

hsbt: r50260 2015-04-12 14:53:30 +0900

rubygemsrubygems/test_case.rb で gem "json" の LoadError を捕捉するようにしています。

nobu: r50261 2015-04-12 15:07:48 +0900

拡張ライブラリ io/wait の IO#wait_writable の rdoc 用コメントで self or nil を返す条件についての記述を修正しています。 EOF についての記述は wait_writable には不要でした。またタイムアウト時は nil を返します。

nobu: r50262 2015-04-12 15:08:39 +0900

拡張ライブラリ io/wait の IO#wait_readable の実装で EOF の検出で ioctl(2) の FIONREAD によるバッファのチェックの前に wait_for_single_fd() のチェックを行うようにしています。 すごく昔に提案されたチケットですがおもむろに対応されてます。なんでだろ。 [ruby-core:36805] [Feature #4849]

nobu: r50263 2015-04-12 15:10:21 +0900

r50262 の続き? 拡張ライブラリ io/wait の IO#wait_readable で ioctl(2) の FIONREAD によるチェックは消して EOF の時も io をそのまま返すようにしています。なるほどそもそも削ろうとしてたのですね。

hsbt: r50264 2015-04-12 15:14:29 +0900

r50260 の再修正。 gem "json" で捕捉する例外は LoadError ではなく Gem::LoadError にしています。また削除していた require "json" も LoadError の捕捉付きで復活させています。

nobu: r50265 2015-04-12 15:35:02 +0900

範囲式の終端部分での syntax error で SEGV することがあった不具合を修正しています。 [ruby-core:68851] [Bug #10957]

nobu: r50266 2015-04-12 15:46:28 +0900

r50263 の IO#wait_readable の EOF に関する仕様変更にテストを追随させています。

hsbt: r50267 2015-04-12 17:36:37 +0900

r50231 による拡張ライブラリ json の bundled gem 化を revert しています。 拡張ライブラリを含む gem パッケージのインストールに困難があるプラットフォーム(クロスコンパイル時)があったからとのことでした。

svn: r50268 2015-04-12 17:39:01 +0900

r50267 で復活させたファイル群の svn property 設定。

hsbt: r50269 2015-04-12 18:12:15 +0900

defs/default_gems を削除して json と rake に .gemspec ファイルを直接追加して、gem パッケージもあるけど標準添付されている他のライブラリと同様の扱いにしています。これにより tool/rbinstall.rb の default_gems についての処理も不要になったようです。

hsbt: r50270 2015-04-12 18:40:11 +0900

拡張ライブラリ json のバージョンを 1.8.2 に更新しています。