ruby-trunk-changes 2019-08-17

今日は rubygems と bundler の更新の cherry-pick で変更がたくさんありました。本体のほうは Refinements の不具合修正? が 1つありました。

[229ae3269d] Yusuke Endoh 2019-08-16 12:27:05 UTC

標準添付ライブラリ rdoc でファイルに対して Marshal.dump で出力するのに一旦文字列オブジェクトにしてから書き込んでたので Marshal.dump の第2引数に IO を渡す方法を使うようにリファクタリングしています。

[bb2a65800d] David Rodríguez 2019-04-03 13:06:29 UTC

rubygems のテストでただの require のかわりに assert_require という assertion を使うようにしています。こんな assertion メソッドがあるのか。

[d4feeb1936] David Rodríguez 2019-04-03 13:11:14 UTC

rubygems の require のテストで loaded_spec_names のチェックも追加しています。

[00cd5d74ce] Samuel Giddins 2017-03-14 17:34:03 UTC

rubygems が上書きする require で $LOAD_PATH 内の gem のパスからファイルを探す通常の探索(のように思える)をその他の処理の前に行うようにしています。 -I オプションによる指定が default gem より優先して効くようにするためらしいです。なんか遅くなりそうだけど…。

[37abd2c390] David Rodríguez 2019-04-03 16:00:02 UTC

00cd5d74cecb6aa4a184e57e2b8246ef6e45d458 の追加修正。 rubygems が古くて Gem.load_path_insert_index が nil だったら $LOAD_PATH を全部調べるように終端を -1 にするようにしています。ますます遅くなりそう…(まあ古い場合だけみたいだけど)。

[b8984370da] David Rodríguez 2019-05-19 15:31:17 UTC

00cd5d74cecb6aa4a184e57e2b8246ef6e45d458 のさらに再修正。ファイルパス探索時に File.expand_path したものを使うようにしています。コミットログによると JRuby での不具合修正らしい。

[89ad5df979] bronzdoc 2019-07-26 05:54:06 UTC

Gem::Command#show_lookup_failure の第4引数 domain を削除してかわりに省略可能引数 suppress_suggestions を追加し実体に名前と渡す内容をあわせるようにリファクタリングしています。

[f42ad4a425] David Rodríguez 2019-04-25 13:57:41 UTC

lib/rubygems.rb の Gem.register_default_spec からファイルの suffix の正規表現の変数をメソッド Gem.suffix_regexp として切り出すようにしています。

[1ac6890bd0] David Rodríguez 2019-04-25 13:58:45 UTC

rubygems の再定義する require で同じファイルを重複してロードしてしまう場合があった不具合を修正しているようです。

[3587824d71] David Rodríguez 2019-04-25 09:48:40 UTC

1ac6890bd05a48e385f564d212765a3a60899659 の再修正。よくわかりませんが default gem の require した時に @path_to_default_spec_map から消すのはやめて、load 済みかどうかのチェックのほうで重複を回避するようにしてるみたいです。

[5998012a0c] David Rodríguez 2019-01-07 11:00:35 UTC

これもよくわかりませんが rubygems の bundler との協調のためのコードで Gemfile.lock に書かれる bundler のバージョンより実際の bundler のバージョンを優先するようにしているっぽいです。

[c78839902b] David Rodríguez 2019-01-10 16:08:59 UTC

5998012a0c7244fe217c2d4f494e50f32ec85d29 の再修正。指定の bundler のバージョンがみつからない時に nil を返すように変更。

[c4f7c260f9] Hiroshi SHIBATA 2019-07-31 03:46:09 UTC

rubygems の Gem::RubyGemsVersion と Gem::ConfigMap という定数を deprecate にしています。

[25a327d41b] Alexander Pakulov 2019-08-14 19:00:27 UTC

rubygems の s3 の署名つき URL 生成のコードの不具合修正。

[56a28a8728] MSP-Greg 2019-08-15 16:43:50 UTC

lib/rubygems/installer.rb の Windows 向けバッチファイル? 生成の ruby.exe のファイル名が決め打ちになってたのを修正しています。

[ae3002b540] Hiroshi SHIBATA 2019-08-16 07:02:32 UTC

rubygems で terminate_interaction の終了コードをマジックナンバー 1 から ERROR_CODE という定数にしています。これ前もあったやつの変更漏れですね。 https://github.com/rubygems/rubygems/pull/2844

[f30d38bdd0] Hiroshi SHIBATA 2019-08-16 12:30:32 UTC

rubygems のテストで $LOAD_PATH にソースディレクトリの lib が含まれてたらそれを末尾に移動するようにしています。default gem のロードの優先度とかが変わっちゃうからかな。

[e0fc9b7ccd] git 2019-08-16 22:49:00 UTC

version.h の日付更新

[7624154595] Hiroshi SHIBATA 2019-08-16 23:44:31 UTC

00cd5d74cecb6aa4a184e57e2b8246ef6e45d458 の変更で rubygems で再定義された require で tainted な文字列を require に渡す可能性があったのを修正しています。

[efd37f8fc3] OKURA Masafumi 2019-08-16 23:52:23 UTC

Enumerable#sum の rdoc 用コメントで数値じゃない要素があった時の TypeError になる例として Array#each で Enemerator を生成してから sum を呼んでる例があって若干まぎらわしかったので、文字列を要素にもつ Range を例に変更しています。 https://github.com/ruby/ruby/pull/2190

[75d29db8f9] Hiroshi SHIBATA 2019-08-16 23:52:13 UTC

00cd5d74cecb6aa4a184e57e2b8246ef6e45d458 の rubygems の再定義する require での default gems より -I オプションを優先するための変更とそれに追随する変更を revert しています。

[045152df9e] Takashi Kokubun 2019-08-17 00:43:05 UTC

.github/workflows/ の GitHub Actions の設定の fail-fast というオプションを false に設定しています。一部のタスク? ジョブ? が失敗しても続きのテストも実行したいため。

[042be439d9] OKURA Masafumi 2019-08-16 13:56:30 UTC

Object#method_missing の rdoc 用コメントのサンプルコードを修正しています。メソッドの引数をちゃんと受け取るのと処理できない時に super を呼んでぶようにする作法を示しています。

[11a9f7ab94] Nobuyoshi Nakada 2019-08-16 15:17:15 UTC

Refinements で Module#using で Refinements を適用している Module 内でさらに Module#refine で refinements のブロックを開くと、その中では外のスコープの using が効かないという不具合を修正しています。これ不具合なのかな…。まあ Refinements は lexical に効くはずだから効いたほうがいいのか。けどなんとなくサンプルをひとめ見た瞬間は、こっちが正しいような気がしてしまったけど…。 [ruby-core:94382] [Bug #16107]

[dc020b06ff] Nobuyoshi Nakada 2019-08-17 03:32:29 UTC

11a9f7ab9431b0f361e43b4ac2bd6ee44827d88b の追加で Refinements 関連の method entry 探索を search_refined_method() という関数に切り出しています。 [ruby-core:94382] [Bug #16107]

[ea496e9fb2] Hiroshi SHIBATA 2019-08-17 02:36:12 UTC

GitHub Actions での Ubuntu のテストに make check を追加しています。

[2468466a1a] Hiroshi SHIBATA 2019-08-17 03:08:07 UTC

ea496e9fb2c930ac0c5ff8c12c4a10fac0ec3c7b の make check 追加に追随して continue-on-error: true の設定が make check についてしまわないよう除外の条件を復活させています。

[ccbfb054b1] Kazuhiro NISHIYAMA 2019-08-17 04:57:12 UTC

bundler の deprecation 警告の typo 修正。

[28267cea08] David CARLIER 2019-08-17 05:17:30 UTC

NetBSD では explicit_bzero() がないそうなので configure でチェックして存在しない場合は explicit_memset を使った代替実装を利用するようにしています。 https://github.com/ruby/ruby/pull/2145

[dce1e14e80] Iain Barnett 2019-08-17 05:24:45 UTC

Fiber#resume の rdoc 用コメントのサンプルで fiber.resume に渡す引数の数値を変更しています。なんかコミットログにいろいろ書いてあるけど、元のサンプルだと最後(にエラーにならずに呼べる) Fiber#resume の戻り値がその前の Fiber.yield に渡した値と関係あるようにみえてしまって混乱するから、みたいです。うーん、そうかな。そうかも。 https://github.com/ruby/ruby/pull/2170

[72adc6cffb] Kenichi Kamiya 2019-08-17 05:56:57 UTC

sample/fact.rb の実装をちょっと整理しています。 https://github.com/ruby/ruby/pull/2374

[9d20d2b0f5] Kenichi Kamiya 2019-08-17 06:03:00 UTC

sample/biorhythm.rb のリファクタリング。このサンプルコードまだあったんだ。 https://github.com/ruby/ruby/pull/2375

[dd16f8524c] Hiroshi SHIBATA 2019-08-16 23:54:05 UTC

75d29db8f965893bb6ab38b9008abc80cdda246e で revert した 00cd5d74cecb6aa4a184e57e2b8246ef6e45d458 はじめとする rubygems の再定義する require で default gems より -I の指定を優先するためのパスを再度追加しています。特に重大な差分はないのでなにか追加修正を一緒にしたというわけではなさそう。

[273f1f4498] Hiroshi SHIBATA 2019-08-17 01:11:05 UTC

rubyspec の require のテストで $LOAD_PATH にパスを追加する時に先頭でなく最後に追加するようにしています。 rubygems の require 関連の変更の影響でしょうね。

[22d9bd944d] Hiroshi SHIBATA 2019-08-17 02:05:29 UTC

dd16f8524c44f8802e634af2577fe5a149cd740e で復活させた rubygems による require 実装でディレクトリパスが symbolic link だった時の対処を追加しています。

[d8148650f6] Hiroshi SHIBATA 2019-08-17 02:30:01 UTC

dd16f8524c44f8802e634af2577fe5a149cd740e で復活させた rubygems の再定義 require で先に $LOAD_PATH 内にみつけたファイルをオリジナルの require に渡した時になぜか LoadError が発生した場合にも対処して残りの処理に fallback させるように例外の捕捉と RUBYGEMS_ACTIVATION_MONITOR のロック再取得するようにしています。

[06fcf88d69] Hiroshi SHIBATA 2019-08-17 03:19:49 UTC

ruby 本体の require のテストで普通に require と書くと rubygems の再定義した Kernel#require が呼ばれてしまってうまくテストできないことがあるので、Kernel.send(:require, ...) でオリジナルのメソッドを呼ぶようにしています。あーなるほど Kernel#require は上書きされるけど特異メソッドの Kernel.require のほうはオリジナルのままなのか。

[260ef51a73] Hiroshi SHIBATA 2019-08-17 03:33:38 UTC

dd16f8524c44f8802e634af2577fe5a149cd740e の rubygems 版の require の対処で Gem.load_path_insert_index が nil の時の対処はやっぱり消しています。これが nil になるのは 1.9 より前らしいので、さすがにそれはもう考慮しないでいいということで。

[d041c6cebb] Hiroshi SHIBATA 2019-08-17 03:35:30 UTC

同じく dd16f8524c44f8802e634af2577fe5a149cd740e で復活させた rubygems 版 require の処理追加のところに意図の説明と rubygems の pull request へのリンクをコメントで追加しています。

[221ba9b66c] Hiroshi SHIBATA 2019-08-17 08:01:19 UTC

260ef51a73c067599826c8ab110c53994c1b6226 で revert した古い ruby 用の Gem.load_path_insert_index が nil を返すケースの対応はやっぱり復活させています。 2.4/2.5 の安定版で壊れるとのこと。

[7664b5cb65] Hiroshi SHIBATA 2019-08-17 07:22:27 UTC

182a408c2c4113eb316c2a87e35880144afb4498 で Proc#to_s および #inspect のファイル名/行番号の表示の前の "@" を削って空白にした変更で rubygems でこれに依存してた部分の修正もしてましたが、古い ruby への対応のためどっちでも動くように再修正しています。

[ef2d415802] David Rodríguez 2019-08-03 12:06:58 UTC

bundler のテストのヘルパーメソッド bundler_path が lib というメソッドとまったく同じ内容だったので削除して lib を使うようにしています。しかし lib ってずいぶん思いきった名前だな…。

[50a91fcd10] David Rodríguez 2019-08-03 12:07:11 UTC

ありそうだなーと思ったらやっぱり bundler のテストのヘルパーメソッド内で lib っていうローカル変数を使ってるところがあったので削除して、内容的には同じだったので lib メソッドをそのまま使うようにしています。

[745b286161] David Rodríguez 2019-08-06 11:16:15 UTC

話題の lib メソッドを spec/bundler/support/helpers.rb から spec/bundler/support/path.rb に移動しています。

[a2ca3a12ba] David Rodríguez 2019-08-06 11:16:44 UTC

bundler のテストの let で bundler_dir というのを定義してたのを同じ内容のヘルパーメソッド root を使うようにしています。

[9995ce64a2] David Rodríguez 2019-08-15 14:37:18 UTC

bundler のテストでローカル変数への代入を繰り返してたところをメソッドチェインに書き換え。

[7551117c70] David Rodríguez 2019-08-08 08:41:56 UTC

bundler のテストで let で setup_path というのを宣言してたのを、これもヘルパーメソッド lib を使って各々の場所で書くようにしています。

[6357540945] David Rodríguez 2019-08-15 14:40:33 UTC

bundler のテストでコマンドとしての bundle ファイルの位置を ruby リポジトリ内では libexec/bundle にするように変更しています。

[7af12a92c8] David Rodríguez 2019-08-15 14:41:52 UTC

63575409458f6b7b1bdaf038a562bc3f011e231e の続きと思われますが bundler のテストで bundle コマンドの位置を特定するのに ruby リポジトリ内かどうかの分岐をヘルパーメソッド bindir にまかせるようにリファクタリングしています。

[3bebdda649] David Rodríguez 2019-08-15 15:58:34 UTC

bundler のテストで ruby 実行時に -rrubygems オプションをつけてたのは、最近の ruby だとデフォルトで rubygems 有効で不要なので削除しています。

[2e6509498c] David Rodríguez 2019-08-15 15:58:56 UTC

bundler の分岐条件の不要な部分の削除。

[63d78afc2d] David Rodríguez 2019-08-15 15:59:48 UTC

2e6509498c1daf3335ac6343bf59441d42011b64 の続き。そもそもオプションの参照が不要ということで条件分岐ごと削除しています。

[e38994d2f7] David Rodríguez 2019-08-15 14:45:04 UTC

bundler のテストで gem_command! というヘルパーメソッドを使うようにするリファクタリング

[91c63828f7] David Rodríguez 2019-08-15 16:12:34 UTC

bundler のテストのヘルパーメソッド gem_bin というのを切り出しています。

[30a4ec1fee] David Rodríguez 2019-08-15 16:13:06 UTC

91c63828f7b841df6b7b124acb752c0a3bca66c0 で切り出した gem_bin で gem コマンドに --backtrace オプションを追加するようにしています。

[122bc65042] David Rodríguez 2019-08-15 16:13:36 UTC

さらに bundler のテストのヘルパーメソッド gem_command でも切り出した gem_bin を流用するようにしています。

[334e615022] David Rodríguez 2019-08-15 14:47:44 UTC

bundler の bundle gem のテストで bundler.gem は不要なので用意しないようにしています。

[b43f4bd218] David Rodríguez 2019-08-15 17:18:01 UTC

bundler のファイルリストについてのテストで変数名の改名。

[c896f71577] David Rodríguez 2019-08-15 14:48:42 UTC

b43f4bd2184989c5f47ee539e583c785dfadb8d0 で改名した tracked_files という変数を bundler のテストのヘルパーメソッドとして定義するように切り出しています。

[19dabfbe57] David Rodríguez 2019-08-15 17:24:56 UTC

同じく bundler のテストで変数名の改名。これもヘルパーメソッドにする布石みたいです。

[6a299906b4] David Rodríguez 2019-08-15 14:59:08 UTC

ということで 19dabfbe574f9a8298054eb417d299ec5fc18412 で改名した変数を bundler のテストのヘルパーメソッドとして切り出し。

[6506993462] David Rodríguez 2019-08-15 15:01:36 UTC

bundler のテストのヘルパーメソッド install_gems でファイルパスの生成に + のかわりに Pathname#join を使うようにリファクタリング

[20af44c277] David Rodríguez 2019-08-15 15:03:26 UTC

bundler のテストのヘルパーメソッドの install_gems には install_gem という alias も残してあったのですが、最後の呼び出し元も改名して alias は削除しています。

[aef5509139] David Rodríguez 2019-08-15 15:07:48 UTC

と思ったら 20af44c27727333b4cd3eef9d5b18daaa0445f0e で削除した alias の install_gem は install_gem から呼び出す 1つの gem のインストールの処理のメソッドとして定義しています。

[f88237623f] David Rodríguez 2019-08-15 15:26:51 UTC

bundler のテストのヘルパーメソッドで Spec::Path という定数参照をしていたところを単に Path を使うようにしています。なんか bundler のテストは省記述指向だな。

[9925e1a10f] David Rodríguez 2019-08-15 16:25:56 UTC

bundler のテストのヘルパーメソッド gem_command! の第2引数に渡す Pathname と to_s してから渡してるところはそのまま渡すようにしています。gem_command! の中でも to_s しているため。

[adfca752d6] David Rodríguez 2019-08-15 16:41:55 UTC

bundler のテストで FileUtils.rm に渡す引数でも to_s してるところがありましたが Pathname も受け付けるのでそのまま渡すようにしています。

[9c0fcd1d0f] David Rodríguez 2019-08-15 16:29:15 UTC

bundler のテストで自明なコメントを削除。

[a56bf5bfde] David Rodríguez 2019-08-15 16:29:23 UTC

同じ bundler のテストでファイル削除に FileUtils.rm のかわりに絶対パスにした上で Pathname#rmtree を使うようにしています。

[580e093fdd] David Rodríguez 2019-08-15 16:46:42 UTC

でもってその絶対パス化した Pathname をローカル変数に一度代入しておくようにしています。

[20c5154f0b] David Rodríguez 2019-08-15 16:48:09 UTC

bundler のテストで Dir.chdir でカレントディレクトリを移動する範囲を狭めて必要なタイミングでのみ移動するようにしています。

[09455301ef] David Rodríguez 2019-08-15 16:53:51 UTC

bundler のテストで bundler.gemspec を作ってテストする処理をヘルパーメソッド with_root_gemspec として切り出しています。

[4318405609] David Rodríguez 2019-08-15 16:54:15 UTC

09455301ef81bc6207e6d3ba1034c35851575e18 で切り出した with_root_gemspec でさらに gemspec ファイルパスを変数に入れて使いまわすようにリファクタリングしています。

[a2d7c97a91] David Rodríguez 2019-08-15 16:58:07 UTC

bundler のテストのヘルパーメソッド with_built_bundler というのも切り出しています。

[08c58e3c0d] David Rodríguez 2019-08-16 06:45:11 UTC

bundler のテストで gemspec ファイルが置かれるディレクトリを取得するヘルパーメソッド gemspec_dir を追加しています。それは root とは違うのか…と思ったけど ruby リポジトリ内の場合はサブディレクトリ内になるんですね。

[37d0e6e471] Hiroshi SHIBATA 2019-08-17 09:18:20 UTC

bundler のテストで $LOAD_PATH を弄った後で復帰する処理は JRuby では実行しないようにしています。 JRuby の $LOAD_PATH は replace できないのかな。

[79fe84edf5] Hiroshi SHIBATA 2019-08-14 12:12:15 UTC

標準添付ライブラリ rdoc のテストのディレクトリ構成の変更。

[3a06c11a7d] Hiroshi SHIBATA 2019-08-14 12:15:43 UTC

rdoc の RDoc::Markup::FormatterTestCase と RDoc::Markup::TextFormatterTestCase の autoload 設定の削除。

[e095803c37] Hiroshi SHIBATA 2019-08-14 12:21:45 UTC

rdoc の gemspec ファイルの spec.files から削除されたファイルを消しています。

[15da2aad76] aycabta 2019-08-16 15:15:07 UTC

rdoc のテストのうち Travis-CI で skip するようにしていたテストの skip をとりやめています。ファイル構成の変更で直ったのかな。

[2a65498ca2] aycabta 2019-08-16 15:14:28 UTC

rdoc の gemspec ファイルの spec.files から .travis.yml を削除しています。