RubyGems 3.1 がリリースされたのでローカル環境の RubyGems をアップデートした。
% gem update --system % gem -v 3.1.2
アップデート後、gem i <gemname>
や gem の差分を見る gemdiff
などを使った時に以下のような警告の川が流れるようになった。
実際 Gem::Specification#rubyforge_project=
が使われている gemspec に関してかなりの量が自分のローカルの場合は表示されていたので、上記は抜粋となる (古めのリポジトリを対象としているので、それも影響しているかもしれない) 。
Gem::Specification#rubyforge_project= called from /Users/koic/.rbenv/versions/2.4.9/lib/ruby/gems/2.4.0/specifications/letter_opener-1.7.0.gemspec:16. NOTE: Gem::Specification#rubyforge_project= is deprecated with no replacement. It will be removed on or after 2019-12-01. Gem::Specification#rubyforge_project= called from /Users/koic/.rbenv/versions/2.4.9/lib/ruby/gems/2.4.0/specifications/letter_opener-1.6.0.gemspec:16.
警告を消すひとつとしては gem pristine <gemname>
すれば良い。
% gem pristine letter_opener (snip) NOTE: Gem::Specification#rubyforge_project= is deprecated with no replacement. It will be removed on or after 2019-12-01. Gem::Specification#rubyforge_project= called from /Users/koic/.rbenv/versions/2.4.9/lib/ruby/gems/2.4.0/specifications/letter_opener-1.7.0.gemspec:16. NOTE: Gem::Specification#rubyforge_project= is deprecated with no replacement. It will be removed on or after 2019-12-01. Gem::Specification#rubyforge_project= called from /Users/koic/.rbenv/versions/2.4.9/lib/ruby/gems/2.4.0/specifications/letter_opener-1.6.0.gemspec:16. Restoring gems to pristine condition... exists /Users/koic/src/github.com/ryanb/letter_opener Restored letter_opener-1.6.0 exists /Users/koic/src/github.com/ryanb/letter_opener Restored letter_opener-1.7.0
今回量が多かったので以下のようなワンライナーをバックグラウンドで実行しておいた。
% ruby -e 'Gem::Specification.map(&:name).uniq.each {|spec_name| puts "* gem pristine #{spec_name}"; `gem pristine #{spec_name}`}'
このワークアラウンドだと警告の出ていない gem についても gem pristine
を実行することになるが、年末の大掃除ということでまとめて適用しておいた。bundle pristine
で対処できるかなと思ったらそうではなかったために書いたワークアラウンドなので、もっとうまいやり方があると思う。
(2019.12.20追記)
hsbt さんからコメントをもらう (いつもありがとうございます!) 。upstream でまだ非推奨 API が使われているようであればパッチを送ると良さそう。
もっと上手いやり方: 消すパッチを投げまくる
— Hiroshi SHIBATA (@hsbt) 2019年12月20日