ruby-trunk-changes r51092 - r51110

今日は RubyGems の更新とそのテストの修正や、Dir#glob のパフォーマンス改善などがありました。

hsbt: r51092 2015-07-02 06:50:14 +0900

標準添付している RubyGems を最新版(2.5.0 c202db2)にしています。 大量の変更があるので個別の解説はなしで History.txt へのリンクを貼るに留めます。今回もテストまわりでいろいろあったようで、今日はその修正が続きます。 https://github.com/rubygems/rubygems/blob/c202db2d681eb3c3a02f187d346fbb2e8d733b26/History.txt#L3

svn: r51093 2015-07-02 06:52:13 +0900

version.h の日付更新。

svn: r51094 2015-07-02 06:52:14 +0900

r51092 で新規追加されたファイルの svn property 設定。

hsbt: r51095 2015-07-02 09:51:50 +0900

r51092 でマージされた rubygems で "/dev/null" がハードコードされている箇所があったので Gem::Util::NULL_DEVICE を利用するように修正しています。ruby 本体にも IO::NULL がありますが rubygems は古い ruby 対応のために独自の定数を定義しているようですね。

hsbt: r51096 2015-07-02 10:30:07 +0900

r51095 の対応のために必要になった require "rubygems/util" を lib/rubygems/resolver.rb に追加しています。

normal: r51097 2015-07-02 10:58:14 +0900

拡張ライブラリ socket で rsock_getfamily() の引数を int (file descriptor) から rb_io_t * に変更して、取得した sa_family を fptr->mode のフラグとしてキャシュすることで繰り返し getsockname(2) を呼ばなくてすむようにしています。 [ruby-core:69713] [Feature #11298]

nobu: r51098 2015-07-02 11:36:23 +0900

r51092 の rubygems 更新の修正。 test/rubygems/test_gem_resolver_git_specification.rb に require 'rubygems/installer' を追加しています。 Gem::TestCase#teardown で $LOADED_FEATURES を元に戻すという後始末をしているので、必要なものは明示的に先に require しておかないと繰り返し require で読み込まれてしまって定数の再定義が発生してしまっていたそうです。

usa: r51099 2015-07-02 12:00:23 +0900

r51092 の rubygems の更新のテストの修正。 テストしようとしているようなおかしなファイル名でファイルが作れないファイルシステム(おそらく Windows でエラーだったのでしょう)では Errno::EINVAL を rescue してテストを skip するようにしています。

nobu: r51100 2015-07-02 12:26:14 +0900

r51092 の rubygems の更新のテストの修正。 test/rubygems/test_gem_server.rb で Gem::TestCase から継承していた process_based_port を再定義して 0 を返すようにして動的にサーバが利用するポート番号を割り当てさせるようにしています。

nobu: r51101 2015-07-02 12:32:03 +0900

r51092 の rubygems の更新のテストの修正。 test/rubygems/test_require.rb の test_dash_i_beats_gems を skip するようにしています。 が次で revert されてます。

nobu: r51102 2015-07-02 13:56:36 +0900

r51101 のテストの skip を revert しています。

nobu: r51103 2015-07-02 14:12:04 +0900

インタプリタ起動時の $LOAD_PATH の Encoding 設定時に ruby_init_loadpath_safe() で行なっていたのと同様の rubygems 向けの内部的なインスタンス変数の設定も行なうようにしています。 あーなるほど、rb_enc_associate() で文字列オブジェクトがコピーされる可能性があるからセットしなおしてるのかな、と思ったけど rb_enc_associate() は複製はしないような気がします。 これも r51092 の rubygems の更新に関連した対応かな。

nobu: r51104 2015-07-02 14:15:53 +0900

rubygems の Gem.load_path_insert_index で $LOAD_PATH のパスの文字列オブジェクトのインスタンス変数 @gem_prelude_index をみて最初の rubygems 用の path を知るようにしています。 r51103 の修正ものこためだったのでしょうね。

usa: r51105 2015-07-02 14:48:14 +0900

st.c で VC++ で C4700 という警告(未初期化変数の参照)が誤って出てしまうのを抑制するため初期化を追加しています。
おそらく r51064 での st_table の ccan/list を利用するように変更した時の影響でしょう。

nobu: r51106 2015-07-02 16:15:09 +0900

Dir#glob の高速化のため replace_real_basename() の引数に rb_pathtype_t * を追加して getattrlist(2) の結果からファイルの種類を返すようにしています。 [ruby-core:63591] [Bug #10015]

ko1: r51107 2015-07-02 18:36:59 +0900

gc.c のデバッグ用関数 obj_info() をバッファなどを引数として渡すようにして rb_raw_obj_info() という関数にして、obj_info() は static な配列をバッファとして渡す wrapper 関数として定義しなおしています。

ko1: r51108 2015-07-02 18:42:36 +0900

r51018 で導入した RGENGC_OBJ_INFO を 1 に定義しておいたのを削除しています。 [Bug #11244] の調査で入れていたのをデフォルトでは外すようにしています。

nobu: r51109 2015-07-02 21:32:09 +0900

replace_real_basename() で getattrlist(2) および FindFirstFileW() の呼び出しがエラーになった時に errno が無視できるものだったら警告を出すに留めるようにしています。無視できるかどうかは to_be_ignored() という関数で判定していて、ENOENT と ENOTDIR が対象です。 [ruby-core:63591] [Bug #10015]

kazu: r51110 2015-07-02 22:05:39 +0900

r51100 と r51104 の ChangeLog エントリの typo 修正。