今日は主に bundler の upstream からの cherry-pick や、eval 内で __FILE__ を参照した時の不具合修正などがありました。
ちなみに cherry-pick が大量にあるので今日は 150 commits ありました。最高記録更新です。
tool/lib/test/unit/core_assertions.rb の Test::Unit::CoreAssertions に MiniTest::Assertions を include する時に envutil.rb のパスの違いで include するクラスを変更しています。gem のテストでもこれを使うようにしてるみたいです。
cb84824481f205d5c057fe2e31776d40a6b06c7c で追加した opt_nil_p 命令を網羅するための MJIT 向けテストを削除しています。
a0980f2446c0db735b8ffeb37e241370c458a626 で revert した最適化命令 opt_nil_p を復活させています。
というわけで a1727e43af18c122c4d7adfa603f895fdc8f3df1 で削除した opt_nil_p の MJIT 向けテストも復活させています。
.travis.yml の homebrew addon を利用せず、before_install で独自に brew update および brew install コマンドを実行するようにしています。
4eb54c49f762031df71addd525f015e5e25ffa0c のコマンドラインで行継続のバックスラッシュが不足していたのを修正しています。
e9e17cbc051e894dfd27eda5feca2939f65552db で eval 内の __FILE__ 参照がデフォルトで警告を出すようになったので irb で使ってたところを source_location を参照するように変更しています。 [ruby-core:35027] [Bug #4352]
ここから bundler の upstream からの cherry-pick が続きます。 dependency のショートカット記述に ruby 2.6 対応を追加。
bundler の出力の色付けで出力先が端末かどうかのチェックを消しています。thor で既にチェックされてるからいらないとのこと。
b95756c7a998311a2d4bbee94530c6ad83ab7d06 の続きで Thor::Base.shell の代入は色付け使わない時も nil を明示的に代入するようにしています。警告避けかなぁ。
bundler のテストで 580e165873c727b9248e1ba7d3ac0af9b121a235 に追随した修正もう一件。
bundler のテストに Bundler::UI::Shell の no-color オプションについてのテストを追加。
bundler の色付け関連のテストを Windows ではスキップするようにしています。
bundler 内の vendor ディレクトリに含まれてる thor のファイル群の相互の require に require_relative を利用するようにリファクタリングしています。
require するのになぜか Kernel.send(:require, ...) してたところを require_relative に直しています。なんで send してたんだろ…。
さらに libexec/bundler からも require を require_relative に変更しています。
bundler のテストで1つの it になってたやつを before と it に分けるリファクタリング。
bundler のテストのために生成する gemspec ファイルの生成処理を helper ファイルに移動しています。
bundler のテストで Gemfile, Gemfile.lock の source のファイルパスを file:// の schema つきで指定されてた時に古い ruby 向けに localhost とホスト部をつけるようにしています。あれ、file schema ならホスト部なんていらないのでは…URI でなんか修正があったような気がそういえばするなぁ。
bundler の file:// ではじまる URI の処理が Windows 環境で壊れていたのを修正。
同じく bundler から rubygems の Gem::Util のメソッドを使ってるところ、こちらは逆に Gem::Util の利用に揃えてます。
bundler の gem push するところで OPT のコード入力でプロンプト出すようにしているようです。コメントから判断しただけですが…。
bundler の git コマンドを起動するところで open3 を利用するようにしています。
bundler のテストで共通の let を親 context に括り出すリファクタリング。
bundler のテストの let で定義する変数名(厳密には変数じゃないけどまあ)を変更して gemspec メソッドの呼び出しまで let に出しています。
bundler のテストに gemspec の required_ruby_version のテストを追加。
bundler のテストで worker (ってなんだろ)のメソッドを stub した時にオリジナルに stop メソッドが伝播しないので Thread が leak していたのを修正。
bundle clean で掃除するファイルパスを特定するのに File.realpath を利用するようにしています。
bundler のテストに BUNDLE_PATH 指定時のテストを追加しています。
bundler のテストのコメントの typo 修正。
bundler の development_dependency の rubocop のバージョンを更新。
bundler の development_dependency の rubocop-performance の依存バージョンを更新しています。
a27198f64850441688ae77d329eab66049d0f5e5 の libexec/bundle の require を require_relative に変更してたのを revert しています。
bundler の依存関係解決でプラットフォーム固有の gem の lockfile 内での扱いの変更みたいです。
bundler が gem のテンプレートを生成する時に development dependency を gemspec ファイルじゃなく Gemfile に生成するようにしています。おー、なるほどたしかに。
bundler でローカル変数に一度受けてたのを参照しているのが1箇所なのでそこに直接右辺の式を書くようにしています。
bundler で gem のテンプレート生成する時に gemspec ファイルに bundler への development_dependency を追加するのをやめています。
bundler の Bundler::Source::Git::GitProxy で revision がみつからないエラーの時のメッセージを強化しています。
bundler の git コマンドを操作する機能のテストを追随させています。
bundler の bundle config の man ページ? の記述を修正。
Bundler::SharedHelper の find_gemfile の引数を削除しています。
bundler のテストのメソッドの mock 漏れ修正。
bundle install ? でオプション --all-platform が指定された時に lockfile に限らず依存関係解決をやりなおすようにしているみたいです。
bundle のコマンドラインオプション --all-platforms が指定された時に自動で bundle update 相当の処理をしないようにしています。さっきのと逆な気がするけどどうなんだろ。
uninstall できないように細工された gemspec ? を持つ gem をインストールしないように修正しています。この修正がどうしてそういう意味を持つのかはわからないけどテストみるとそういう感じらしい。
bundle コマンドオプションに --all-platforms オプションが指定された時にその影響を config ファイルに書き込んで永続化しないようにしています。
bundler のテストのデバッグメッセージを詳細にしています。
bundler のテストで重複しているチェックを削除しています。
bundler のテストで rq でチェックできるものを include でチェックしていたのを eq に揃えています。
bundler のテストで Gemfile を生成するのに gemfile というヘルパーメソッドを使うようにリファクタリングしています。
bundler のテストのヘルパーメソッドで不要な処理を削除。
bundler のテストで Gemfile.lock ファイルの生成もヘルパーメソッドを利用するようにリファクタリング。
bundler のテストの名前の typo 修正。
bundler の development_requirement の rubocop のバージョンを再度更新。
bundler のテストで Hash リテラルを代入するのになぜか begin ... end ブロックで囲んでたのをやめています。謎文法。
bundler のテストで context ごとに異なる前処理を if で分岐してたのを context 毎の before にわけて書くように修正しています。
Bundler::GemHelpers#generic で引数が Gem::Platform::RUBY の時に特別処理してましたが、参照する Hash オブジェクトを格納する GENERIC_CACHE に最初からそのためのエントリを入れておくようにリファクタリングしています。
Bundler::Definition#add_current_platform から追加する platform を用意するところを current_platforms という private メソッドに切り出しています。
同じく Bundler::Definitions の expand_dependencies の処理の一部を Bundler::Dependency#expanded_platforms というメソッドに切り出すリファクタリング。
bundler のテストで専用の matcher を利用するようにリファクタリング。
Gemfile.lock にインストールした platform を全て列挙するようにしています。
Bundler::Definition#expand_dependencies で対応 platform がみつからなかった時の警告を削除しています。
dae6d303d5aa13eeeb482398eb748b3a8f4edcfa の追随だと思いますが bundler の config ファイルの BUNDLE_DISABLE_PLATFORM_WARNINGS っていう項目を削除しています。
3af9d8bb671cfdc474110af3f2db24e36954d38d でリファクタリングした Bundler::Definition#add_current_platform メソッドを削除しています。え、じゃあ current_platforms もいらなくなったんじゃないの、と思ったけどそれは既に別のところでも利用されてました。
その Bundler::Definition#current_platforms で配列に platform をつめて返すかわりに tap を利用するようにリファクタリング。
bundler のテストで余計な警告を削る処理が不要になってたみたいで消しています。
bundler のテストの bundler 自身のファイルの内容のチェック? でチェック対象のディレクトリを増やしています。
56fd027aa6cecaa6910ec6b96270299937f124c8 の続きで bundler のテストで除外ファイル名が typo していて機能していなかったところを消しています。
bundler で Gem.refresh を再定義? していたのをやめています。
bundler のテストの Gem.refresh のテスト? でチェック方法を変更しています。
bundler のテストで rubygems のバージョンによる guard が不要になったので削除しています。
同じく bundler のテストで rubygems のバージョンによる guard のテスト対象のバージョンを変更しています。
bundler のサポートする rubygems のバージョンを 2.5.2 以降に引き上げています。
Bundler::CLI#outdated の分岐内で重複した条件での unless を消しています。
Bundler::CLI のサブコマンド実装でチェックするオプションの間違いを修正。
33ce42dd5dd10cb86258e78010563f86f412ce01 の再修正。 bundle package サブコマンドのオプション --all を定義するかどうかをフラグで決めてたのを、常に定義してデフォルト値を参照してたフラグに依存させるように修正しています。
bundler の cache_command_is_package というフラグを消して bundler_3_mode というのを流用するようにしています。
bundle cache というサブコマンドを bundle package の別名にしています。
bundler のテストで出力文字列のチェックで ruby のリポジトリ内でのテストがこけるのを修正するため受け付けるメッセージの条件を緩めるように正規表現を修正しています。
Bundler::BuildMetadata.git_commit_sha で未定義のインスタンス変数への参照の警告抑制のため instance_variable_defined? でチェックしてから参照するようにしています。
bundler のテストで bundle コマンドの位置を指定するのに ruby のリポジトリ内でテストする時の対応を修正しています。
432285c0040d547c24294611725edddb78560ac2 で追加したテストでファイルパスの指定の間違いを修正。
bundler の spec_helper.rb で環境変数への設定時に不要な original_env という変数への代入を削除しています。
bundler の環境変数の扱いについてのテストを修正していますが、なんかテスト内容が変わってるような気も。
Bundler::EnvironmentPreserver::BUNDLER_KEYS という配列の定数から "BUNDLER_ORIG_MANPATH" というキーワードを削除しています。
bundler のテストで環境変数をいじるのを spec_helper.rb でやってたのを必要なテストでのみ行うようにしています。
55831647fbea0005449f714eec7672fab50cf9d3 で環境変数のリセットを行ってるテスト部分にコメントを追記しています。
bundler で ruby 1.8 との互換性のためにつけていた String#dup の呼び出しを削除しています。
lib/bundler/templates/Executable.bundler でも代入右辺を謎の begin ... end ブロックで囲んでたのをやめています。古い ruby 向けの対応だったのかもな。
lib/bundler/templates/Executable.bundler に bundler_requirement というメソッドを追加しています。うーんそもそもこのファイルはなんなんだろう。
lib/bundler/templates/Executable.bundler の activate_bundler というメソッドの引数を使ってなかったので削除しています。
また lib/bundler/templates/Executable.bundler で警告メッセージを修正しています。
lib/bundler/templates/Executable.bundler の bundler_requirement に古い rubygems 向けの対応を追加。
bundler のテストに使う Gemfile.lock の PLATFORMS の部分を可変にしています。
bundler のテストの PLATFORM を固定することでテスト実行するプラットームに依存しないようにしているようです。
bundler のテストで Process.fork を利用しているものを Windows で skip するようにしています。
bundler のテストのヘルパークラス RequirementChecker の inspect を定義して意味のある表示をするようにしています。
f73020d493ec2bf7c79fc118f83f328caee701d7 を revert してやっぱり --all オプションの定義自体を cache_all フラグに依存させるようにしています。
Bundler::CLI で bundler_3_mode というフラグを参照していたところを cache_all をチェックするようにしています。
bundler のテストで互換性のために? オプション引数を渡すのに使ってた forgotten_command_line_options というメソッドの利用をやめています。
bundler のテストのさっき使うのをやめてた forgotten_command_line_options というメソッドで不要になった処理を削除。
bundler のテストで共通の前処理をひとつ上の before ブロックに移動するリファクタリング。
Bundler::CLI::Outdated の options_include_groups を attr_reader で定義するようにリファクタリングしています。
4e76aef280f8440a9e499a05a2d74e6f2ba7cdd6 でインスタンス変数 @options_include_groups に格納するものを配列ではなく Array#any? を呼んだ結果の真偽値を入れるようにしています。参照しているところも any? を常に呼んでたので実は欲しいのは真偽値だったみたいなので。
Bundler::CLI::Outdated さらに filter_options_patch と sources、outdated_gems_by_groups、outdated_gems_list も attr として定義するようにしています。
lib/bundler/cli/outdated.rb の gem の情報表示部分を print_gems というメソッドに切り出して共有化しています。
lib/bundler/cli/outdated.rb のメッセージ文字列を行継続と文字列リテラル連結を使ってたけどそんなに長くないので1行で書くようにリファクタリング。
Bundler::CLI::Outdated で続いて strict も attr_reader で定義するようにしています。
Bundler::CLI::Outdated のメソッド check_for_deployment_mode を check_for_deployment_mode! に改名しています。
bundler のテストの spec_helper.rb で BUNDLE_USER_XXX の環境変数群をリセットしておくようにしています。
man/gemfile.5.ronn に書かれてる Gemfile での git リポジトリを指定する記法のサンプルを修正。
man/bundle-binstubs.ronn の typo 修正。
bundler で定数 RUBY_ENGINE の存在を defined? でチェックしていたのをやめています。 1.8.7 以降ずっとあるのでもういらんやろってことみたいです。
bundler 自身の gemspec ファイルに書かれてた add_development_dependency を削除しています。
lib/bundler/compatibility_guard.rb というファイルを削除して Bundler 2系向けの警告? を出す処理を削っています。
Bundler::CurrentRuby#ruby? メソッドに Gem::Platform::RUBY と Bundler::GemHelpers.generic_local_platform を比較するコードを追加しています。よくわからないけどたぶんテスト向けの処理かな。
bundler で生成する gem のテンプレートの README.md でアポストロフィにシングルクオートを使うように修正しています。どこが違うのがいくらみてもわからなかったけどクオート記号だった。
bundler のテストで cache_all オプションを毎回つけてるのを bundle config set で保存しておくように書きかえています。
bundler の vendor ディレクトリ配下に取り込んでる net-http-persistent のバージョンを 3.0.1 に更新しています。今みてみたら bundler の vendor には fileutils もコピーが入ってるんですね。
bundler のテスト時の automatiek への依存バージョンを 0.2.0 に更新しています。
lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb から connection_pool の require を require_relative にしていたのを通常の require に戻しています。
bundler の vendor に同梱されている net-http-persistent のバージョンをさらに 3.1.0 に更新しています。
bundler の rubocop の依存バージョンを 0.74.0 に更新しています。
bundler のテストでロードパスのリストに bundler 用のを追加する処理でパスを文字列するようにしています。
bundler のテスト spec_helper.rb で環境変数 GEMRC をクリアしておくようにしています。
bundler が生成する gem のテンプレートの README.md のリンク修正。
bundler のテストのヘルパーで ruby のバージョンを取得するのに RbConfig を利用するようにしています。
b3b2b55f7b7ab035851176d28ecee4afaa3fe0cc で使わないようにした Bundler.rubygems.config_map をもう一箇所 RbConfig で代替してメソッド定義を削除しています。
div, divmod, fdiv, quo, name などの Symbol の ID を組込みで定義しておくようにしてあちこちで rb_intern() していたものは組込みのを使うようにしています。
4ea5c5610aeadecf78fdd2b7d6faad8574953620 のインデントのタブを空白に展開。
eval 内で __FILE__ や __LINE__ を参照している時の警告でその場所をメッセージに含めるようにしています。
チケットの報告内容非常が不思議な感じですが Pathname に与える文字列オブジェクトの状態によって(共有文字列かどうかとか?) expand_path の結果を Kernel#eval にファイル名として渡して、その中で __FILE__ としてアクセスされるとバックトレースのファイル名表示が壊れるという不具合を修正しています。修正箇所は parse.y で ruby_sourcefile_string を保存する時に rb_str_new_frozen() のかわりに rb_fstring() を使うようにしています。つまり参照が漏れてて GC されてしまったということかな。 [ruby-core:94122] [Bug #16041]
5931857281ce45c1c277aa86d1588119ab00a955 のインデントのタブを空白に展開。
rubyspec の eval 内で __LINE__ や __FILE__ を使ってたところの警告を抑制するため suppress_warning ブロック内にしています。
tool/lib/colorize.rb の属性に bold, underline, reverse などの強調用のものを追加しています。
doc/contributing.rdoc のビルドに必要なツール autoconf, bison, gperf にそれぞれ必要なバージョンも追記しています。