RubyGems 3.1のローカル非推奨警告を消す

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 が使われているようであればパッチを送ると良さそう。