ruby-trunk-changes 2019-07-31

今日は rubygems の upstream からの更新や Hash の要素数が小さい時の array hash 実装でのメモリ使用量を減らすための変更などがありました。

[f3b0ed3f26] Takashi Kokubun 2019-07-30 12:15:10 UTC

azure-pipelines.yml でも macOS でのビルド時に brew update するのはやめています。

[ceb9e276b9] Nobuyoshi Nakada 2019-07-30 12:15:49 UTC

e25088488bbf7b4bf1be19e57ee5fba41ad6f21c の make check 時に master からの差分の #include を検出するコマンドで git log に --format=oneline オプションをつけてコミットは短かく表示するようにしています。

[a50bc9f3c8] Jeremy Evans 2019-06-20 18:50:22 UTC

1a759bfe5d554c22571d2e6e4e5998cf06a7b98f の File#path が常に taint してたのをやめる変更のリトライ。テストをちょっと修正しているようです。 [ruby-core:85619] [Bug #14485]

[369c36ef15] git 2019-07-30 19:00:46 UTC

version.h の日付更新

[d8562ab2a4] Aaron Patterson 2016-11-28 22:22:12 UTC

IO.pipe に binmode: true というオプションを渡した時にその IO#external_encoding に ASCII-8BIT を設定するようにしています。 改行コードの扱いの変更のみで Encoding についての変更がなかったので IO#binmode を呼んだのとは挙動が違ってたのでそろえようとしています。 [ruby-core:78404] [Bug #12989]

[ebc99e026d] Jeremy Evans 2019-07-25 20:47:08 UTC

d8562ab2a40658db0e6a44ce07cfbe616b9b4078 の再修正。 IO.pipe には引数で明示的に external_encoding と internal_encoding を設定できるので、これが指定されている時は binmode: true があっても Encoding は ASCII-8BIT にはしないようにしています。 [ruby-core:78404] [Bug #12989]

[a4c09342a2] git 2019-07-30 20:49:04 UTC

d8562ab2a40658db0e6a44ce07cfbe616b9b4078 のインデントのタブを空白に展開。

[4e27319c2c] David Rodríguez 2019-04-28 23:45:18 UTC

ここからは rubygems の upstream からの cherry-pick が続きます。
rubygems の未使用のメソッド削除。

[d64cc80b66] David Rodríguez 2019-04-29 07:07:16 UTC

rubygems の外部コマンド実行を IO.pipe から Open3 を利用した実装の変更。 JRuby サポートのためみたいです。

[6f60ead756] bronzdoc 2019-05-29 04:41:54 UTC

Gem::ConfigFile#initialize からオプション処理部分を set_config_file_name という private method に切り出すリファクタリング

[7990d8dc50] bronzdoc 2019-05-29 05:07:01 UTC

6f60ead7565e02901db63f005008860b65b4a15e で切り出したメソッドで rubygems の設定ファイルを環境変数 GEMRC を参照するようにしています。

[6c5170634a] bronzdoc 2019-05-29 23:34:47 UTC

rubygems の Gem::MockGemUi というクラスで StringIO を使ってますが require をトップレベルから initialize メソッドの中に移動して、利用するまでロードしないようにしています。

[d74ea2eeb2] bronzdoc 2019-05-31 02:34:44 UTC

7990d8dc50007b04118cb36c9f200efcddb0295f の環境変数 GEMRC の参照で無駄な || 演算子があったので削っています。

[673ef894ac] bronzdoc 2019-05-31 21:37:12 UTC

7990d8dc50007b04118cb36c9f200efcddb0295f の rubygems の GEMRC 環境変数の参照で空文字列の時も未設定のように扱うようにしています。

[89bd1df895] bronzdoc 2019-06-05 01:51:08 UTC

rubygems に空行を加えるだけの修正。

[2453d16f5e] Benoit Daloze 2019-06-06 13:52:44 UTC

rubygems の定数 Gem::Specification::LOAD_CACHE_MUTEX という定数に Mutex を追加して LOAD_CACHE の操作をこの Mutex で排他するようにしています。

[05ae2c11fa] Benoit Daloze 2019-06-06 13:54:17 UTC

2453d16f5e44f67a50e1be9b08504a14960610ef の再修正、っていうか元から壊れてたみたいだけど LOAD_CACHE からの参照で既に同じファイルの spec があったらそっちを返すようにしています。

[0ca494fc80] David Rodríguez 2019-06-20 11:10:06 UTC

rubygems のテスト用クラス? TestGem の test_use_gemdeps_missing_gem メソッドで gemspec ファイルの deprecated 警告を抑制するようにしています。

[df0b41fc72] David Rodríguez 2019-06-20 10:16:58 UTC

Gem::Specification の rubyforge_project= を deprecated にしています。rubyforge なつかしいな……。

[8b91a6d0a0] bronzdoc 2019-06-22 22:39:17 UTC

rubygems の不要になった? TODO コメントを削除しています。

[a7bce01175] bronzdoc 2019-06-22 22:41:07 UTC

rubygems に found &&= false という演算子つき代入文があったのですが、これ結局常に false 代入してるやろ、っていうノリでただの代入にしています。けどこれ found が nil だった時は代入しないので厳密には同一じゃないけど、まあぱっとみたところ found には true か false しか入らないみたいなのでよさそう。

[5eacb4c52e] bronzdoc 2019-06-22 22:58:55 UTC

rubygems で 互換性のために残してた Gem::Resolver::DependencyConflict を削除しています。

[c421ef1142] bronzdoc 2019-06-23 05:42:21 UTC

Gem::GemcutterUtilities にあった OptionParser.accept の呼び出しを Gem::Command に移動しています。gemcutter! これまた懐しい名前を。

[6be927ff4a] bronzdoc 2019-06-23 13:43:23 UTC

rubygems の誤った TODO コメントを削除しています。

[8103d46a4d] Daniel Berger 2019-06-19 12:39:39 UTC

rubygems の Gem::Installer に package という attr_reader を追加しています。

[688ccc9602] bronzdoc 2019-06-24 02:03:50 UTC

rubygems の Gem::Commands::UnpackCommand#get_metadata の定義を Gem::Package.metadata に移動するリファクタリング

[38daeded66] Alexander Pakulov 2019-06-25 00:36:31 UTC

よくわからないですが rubygems でパッケージを S3 からダウンロードするところの署名検証? のあたりの方法を変更しているようです。

[6bd7772361] bronzdoc 2019-06-24 02:08:34 UTC

688ccc96020258acb4c02a2f8c5ff6e5a0bbc966 で移動した Gem::Package.metadata のメソッド名をさらに raw_spec に変更しています。

[ff214e9232] bronzdoc 2019-06-25 01:01:33 UTC

lib/rubygems/exceptions.rb の TODO コメントを削除しています。

[56801d4532] bronzdoc 2019-06-25 22:42:47 UTC

lib/rubygems.rb の TODO コメントを削除しています。

[b2a54744f2] bronzdoc 2019-06-26 23:51:22 UTC

lib/rubygems/specification.rb の TODO コメントを削除しています。

[bd78eabcf3] Alexander Pakulov 2019-06-28 17:21:12 UTC

38daeded66afb4a7beafa47d82625a4eb40c112b の追加修正。 S3 の OAuth? の署名検証の expiration を伸ばしてます。

[60d3f9ef9f] bronzdoc 2019-06-30 05:23:44 UTC

lib/rubygems/specification.rb の不要な TODO コメント削除。

[eb35124cca] bronzdoc 2019-06-30 05:38:46 UTC

lib/rubygems/test_case.rb の不要な TODO コメント削除。

[7081185664] bronzdoc 2019-06-30 05:50:40 UTC

lib/rubygems/test_case.rb の util_gem メソッドで引数とブロック両方指定された時に例外発生させてたのを削除しています。移行完了ってことかな。

[1dfe132aa5] bronzdoc 2019-06-30 05:59:31 UTC

lib/rubygems/dependency_installer.rb の TODO コメントをただのコメントに変更しています。

[4a8c2dd419] Alexander Pakulov 2019-07-03 23:35:59 UTC

38daeded66afb4a7beafa47d82625a4eb40c112b などの続き。 rubygems で S3 の署名つき URL の処理するクラスを切り出すリファクタリング

[aa9015dd84] Alexander Pakulov 2019-07-05 00:16:25 UTC

4a8c2dd4192517fa030b6585ae82bf925c80516a で切り出した S3 署名つき URL 処理のファイルで一部の require をトップレベルから実際に必要になるメソッド内に移動して遅延ロードするようにしています。

[74419711ad] Alexander Pakulov 2019-07-06 20:05:43 UTC

4a8c2dd4192517fa030b6585ae82bf925c80516a で切り出したクラスのメソッドの引数で expiration を指定できるようにしています。

[0d596c1ab2] Alexander Pakulov 2019-07-10 01:52:54 UTC

4a8c2dd4192517fa030b6585ae82bf925c80516a で切り出したクラスのメソッドを分割するリファクタリング

[5947ea31ca] Alexander Pakulov 2019-07-10 02:14:29 UTC

test/rubygems/test_gem_remote_fetcher.rb に require "json" を追加しています。テストだからここで遅延しなくてもいいんじゃないかな。まあいいけど。

[a2f0331c4e] Nobuyoshi Nakada 2019-07-11 01:24:01 UTC

Gem::Specification#to_ruby で gemspec ファイルを生成する時に add_runtime_dependency を使うかどうかを Gem::VERSION で分岐するコードを生成してたのを respond_to? を使うように変更しています。あと分岐を1つ減らしてます。

[a34168f2ac] bronzdoc 2019-07-17 00:07:07 UTC

Gem::Specification の autorequire という属性はもう動いてないので削除しています。

[41dd9f7e67] bronzdoc 2019-07-17 00:39:40 UTC

rubygems の Gem::RemoteFetcher#fetch_size というメソッドを deprecated にしています。

[1eaacb1ef5] bronzdoc 2019-07-17 00:50:36 UTC

lib/rubygems/stub_specification.rb で Kernel#open のかわりに File.open を利用するようにしています。

[a3c0ea55f8] Hiroshi SHIBATA 2019-07-21 00:58:41 UTC

Gem::TestCase#setup で環境変数 GEMRC をクリアするようにしています。

[d1806bd8da] Hiroshi SHIBATA 2019-07-21 01:17:26 UTC

lib/rubygems/test_case.rb の未使用のインスタンス変数の削除。

[a3b784b3a0] Vít Ondruch 2019-07-22 12:31:10 UTC

Gem::BasicSpecification.default_specifications_dir を deprecated にして Gem.default_specifications_dir に移動しています。

[33025d9768] bronzdoc 2019-07-26 04:11:37 UTC

lib/rubygems/gemcutter_utilities.rb の terminate_interaction の引数に 1 を渡してたのを ERROR_CODE という定数にしています。けどファイル内にもう一箇所 1 のままのところが残ってますね。

[3cc814bdf6] bronzdoc 2019-07-26 05:02:46 UTC

test/rubygems/test_gem_installer.rb の変数の shadowing の警告除去。

[0817d95714] David Rodríguez 2019-06-04 08:21:14 UTC

rubygems の空行追加。スタイルの統一のためみたいですね。

[497efa0ec9] David Rodríguez 2019-06-04 08:40:30 UTC

rubygems のインデントの修正。これもスタイルの統一のためみたいですね。

[bb6bd7e985] David Rodríguez 2019-06-04 08:40:54 UTC

もうひとつ lib/rubygems/util/licenses.rb もインデントを修正。

[61893ddf75] David Rodríguez 2019-06-04 15:32:45 UTC

rubygems のテストに rake package のテストを追加しています。

[62e2b2e66f] David Rodríguez 2019-06-27 13:32:21 UTC

61893ddf75760c35d5c676914cc50c7e4f9a64ae で追加した rake package のテストのエラー時のメッセージを強化しています。

[a51661d378] bronzdoc 2019-07-10 13:16:57 UTC

rubygems の gem env packageversion というサブコマンドを削除しています。互換性のため deprecated にした状態で残してたものみたいです。

[d97fc48e92] bronzdoc 2019-07-28 13:50:11 UTC

rubygems の Gem::Ext::Builder#build_error の第1引数 build_dir は既に利用されてなかったので引数自体を削除しています。なのですが、これ呼び元の修正っていらないのかな……。

[9dc0f39de5] bronzdoc 2019-07-28 13:58:03 UTC

と思ったら d97fc48e92dbee041a476f7dca65f3d466c8ca91 で build_error の引数削除したのに対応して呼び元でも渡す引数から削ってます。うーん grep すると lib/rubygems/installer.rb にも同じかどうかわからないけど build_error の呼び出しがあるけどこっちはいいのかな。

[b73ad4999a] bronzdoc 2019-07-28 14:03:01 UTC

rubygems の Gem::Ext::Builder#build_extension で build_for の呼び出しを extension がディレクトリ特定に使われる前に移動しています。

[5824981d98] bronzdoc 2019-07-28 14:06:01 UTC

Gem::Ext::Builder#build_extension で引数の extension が nil/false だった時に空文字列で初期化する行は不要とのことで削除しています。

[ab8d9a5325] bronzdoc 2019-07-28 14:37:02 UTC

Gem::Ext::Builder の生成時に @ran_rake を nil でなく false に初期化するようにしています。

[2a81d3a26a] Hiroshi SHIBATA 2019-07-27 07:45:45 UTC

rubygems の rake package のテストを Rakefile がみつからない時に skip するようにしています。

[77c0e23b0c] Hiroshi SHIBATA 2019-07-28 01:59:07 UTC

a51661d378c26ae5bd4b608de4948887e70bcacc で削除した lib/rubygems/compatibility.rb を互換性のため復活させています。

[3e4e8dbe20] Hiroshi SHIBATA 2019-07-30 12:40:37 UTC

.travis.yml で macOS でのテスト時に ntlm-http という gem を uninstall しておくようにしています。この gem が古すぎて RubyGems で削除した autorequire の機能に依存してしまってたみたいです。

[4afd897524] Hiroshi SHIBATA 2019-07-30 13:38:00 UTC

test/rubygems/test_rake_package.rb で File.exists? が使われてたので File.exist? に修正しています。

[ebd398ac5a] Koichi Sasada 2019-01-16 10:48:30 UTC

構造体メンバー struct RHash::iter_lev を消してそのぶんを reserved に戻し、かわりに flags のうち一部のビットを使って iter_lev の代替にするようにしています。 iter_lev は Hash が each などで iterate 中に検出するためにインクリメントしていくカウンターですが、通常この値はそんなに大きくはならないので int まるまる使わなくてもいいだろってことみたいです。しかしそれでも意図的にネストさせればあふれさせることはできてしまうので、そのような場合のために rb_ivar_set_internal() という API を追加してあふれたら内部的なインスタンス変数を使ってそっちに iter_lev を格納してしまうようにしています。うーむ、この hash_iter_lev を持ってる状態の Hash を Marshal.dump して Marshal.load するとどうなるんだろう。まあインクリメント時に flags のほうをさきに見てあふれたら内部的インスタンス変数のほうに上書きセットされるから動作がおかしくなることはないか。

[72825c35b0] Koichi Sasada 2019-01-17 16:53:10 UTC

ebd398ac5a4147a1e652d6943c39a29a62f12e66 で空けた struct RHash の VALUE 1つぶんのメンバーですが、これを Hash の array 実装をした時の hash 値の格納のために使うようにしています。といっても hash 値も VALUE 1つぶんいるのでそのままでは足りないので、なんとそれぞれの要素の下位 1byte だけを切り出してそれを格納(array hash 実装では要素数 8 までなので合計 8 bytes で sizeof(VALUE) が 8 の場合は足りると。すごいなぁ。小さい Hash の省メモリ化のためだと思います。また debug counters にこの切り詰めた hash の値による影響(一致したのに実は eql? じゃなかった、一致しなかったけど一致した)をカウントするようにしています。 [ruby-core:91530] [Feature #15602]

[e315f3a134] git 2019-07-31 01:22:47 UTC

72825c35b0d8b9d566663de961fddbf4f010fff7 のインデントのタブを空白に展開しています。

[13e84d5c0a] Nobuyoshi Nakada 2019-07-31 02:08:05 UTC

ebd398ac5a4147a1e652d6943c39a29a62f12e66 で導入した flags の一部を使って iter_lev を表現するための処理で使う RHASH_LEV_MASK をマクロとして定義するようにしています。古いコンパイラ対策? も含まれているようです。

[4979ba38fa] Yusuke Endoh 2019-07-31 02:27:59 UTC

rubygems のテストで古い gem による 41dd9f7e67c1d767a7d040cd79f26985e3996821 で deprecated にした fetch_size をテストで使っているところの警告を抑制するようにしています。

[312879693f] Koichi Sasada 2019-07-31 02:30:23 UTC

13e84d5c0a53ad013aa0093f179115bcf88417e9 でマクロにした RHASH_LEV_MASK の定義を hash.c から internal.h に移動してコメントをつけています。

[823adea954] Yusuke Endoh 2019-07-31 02:44:20 UTC

rubyspec のテストでメソッド再定義の警告抑制のため直前で remove_method するようにしています。

[1d02832bcf] Yusuke Endoh 2019-07-31 02:45:28 UTC

同じく rubygems のテストで Gem::Specification.default_specifications_dir を使っているところで deprecation の警告を抑制するため Gem::Deprecate.skip_during を利用しています。

[816e5055c9] Yusuke Endoh 2019-07-31 02:52:59 UTC

d8562ab2a40658db0e6a44ce07cfbe616b9b4078 で追加した IO.pipe の binmode オプションについてのテストで、生成した pipe の IO オブジェクトを ensure 節で close するようにしています。

[e83ec207cd] Koichi Sasada 2019-07-31 03:46:15 UTC

CI のデバッグのため MiniTest::Unit#location で backtrace が nil な例外が渡された時にデバッグメッセージ出力するようにしています。

[06574ad945] Yusuke Endoh 2019-07-31 05:35:21 UTC

Kernel#Float() のテストでオーバーフローを起こした時の警告を抑制するため一時的に $VERBOSE を nil にしておくようにしています。

[efac0a2384] Koichi Sasada 2019-07-31 05:53:14 UTC

e83ec207cd5fda973c41d6629d8504b515522b12 で追加したデバッグ出力用の変更を revert しています。

[cac44def0b] Koichi Sasada 2019-07-31 06:01:19 UTC

06574ad945dcce0bf626b3af020810230b169b56 でデバッグメッセージを入れた MiniTest::Unit#location で渡された例外の backtrace が nil の時に "<empty>" を返すようにしています。 SystamStackError の場合 nil になることがあるとのこと。

[5f95edb7af] Koichi Sasada 2019-07-31 06:10:16 UTC

おそらく cac44def0b0f0fdcd1aa8cf610e16a5506d2726b も関連して ebd398ac5a4147a1e652d6943c39a29a62f12e66 の struct RHash::iter_lev の削除の影響をテストするため深くネストした Hash のイテレータのテストで SystemStackError 例外が発生しても無視するようにしています。

[40651cf1f5] Koichi Sasada 2019-07-31 06:12:57 UTC

ebd398ac5a4147a1e652d6943c39a29a62f12e66 で追加した iter_lev があふれた時のテストで hash の衝突がある場合に成立しない assertion があったのでコメントアウトしています。

[14eede6e53] Kazuhiro NISHIYAMA 2019-07-31 08:45:43 UTC

標準添付ライブラリ rinda のテストでテスト用に立てた DRb のサーバーの停止漏れがおきないよう teardown の先頭で shutdown するようにしています。

[eab6c534ad] Benoit Daloze 2019-07-31 09:04:35 UTC

rubyspec の Hash#rehash のテストで Hash のキーに配列を使っていたのを特異メソッドとして hash を上書きした Object のインスタンスを使うように書きかえています。 array hash 実装の時の影響でキーの Array を変更してもたまたま fetch できてしまったとかかな……。

[e432f5dafd] Benoit Daloze 2019-07-31 09:06:54 UTC

rubyspec の Hash#rehash のテストの example を分割しています。

[4562c13093] Yusuke Endoh 2019-07-31 10:51:58 UTC

lib/bundler/shared_helpers.rb の require "rubygems" を削除しています。 circular require を解消するため。

[835fa9e54a] Yusuke Endoh 2019-07-31 10:55:16 UTC

5f95edb7af68ce03732da4d49eee8d6ee87ef544 で Hash の iter_lev 関係のテストで SystemStackError を rescue してるところでローカル変数に bind してましたが参照してなくて警告が出るので変数は指定しないようにしています。